2017-04-03 4 views
0

Wie funktioniert die gemeinsame Abfrage? Durchläuft die innere Abfrage die äußeren Abfragezeilen? Angenommen, ich habe einen Schülertisch mit nur 1 ID-Spalten mit den Werten 1, 2, 3. Kann ein Körper ein bildliches Beispiel geben?Oracle Co verwandte Abfrage?

Antwort

0

Die korrelierte Unterabfrage wird (theoretisch - ohne Berücksichtigung möglicher Optimierungen) einmal für jede Zeile der Haupttabelle (n) durchgeführt.

Für die s.ID = 1 die Unteranfrage keine Zeile (s1.ID < 1 return nichts)

für die s.ID = 2 und es gibt 1 zurück (Prädikats s1.id < 2)

für die s.ID = 3 gibt es 1,2

somit die erste Zeile (s.ID = 1) nicht ausgewählt ist (die Unterabfrage keine Zeilen zurück),

für die zweite Reihe (s .ID = 2) das Prädikat ist s.id < any (1) welches inumgeschrieben wirdsiehe Regeln für ANY und die Zeile ausgewählt ist nicht als 2 < 1 FALSE ist

für die dritte Reihe (s.ID = 3) das Prädikat s.id < any (1,2) die zu s.id < 1 OR s.id < 2 neu geschrieben wird, die auch flase ist.

So ist die Abfrage

create table student as 
select rownum id from dual connect by level <= 3; 

select * 
from student s where s.id < any (select s1.id from student s1 where s1.id < s.id); 

Rückkehr leeres Ergebnis (keine Zeilen).