Subinterogari corelate
Serverul Oracle realizeaza o subinterogare corelata
cand o subinterogare face referinta la o coloana a tabelului
referit in interogarea principala. Subinterogarea este evaluata cate
o data pentru fiecare rand procesat de declaratia parinte.
Declaratia parinte poate sa constea intr-o
fraza SELECT, sau instructiuni UPDATE (actualizari
corelate) respectiv DELETE (stergeri corelate).
Subinterogari incapsulate versus subinterogari corelate
In cazul subinterogarilor normale (incapsulate),
la inceput este rulata subinterogarea, o singura data, si intoarce
valorile care vor fi utilizate de interogarea principala.
O interogare corelata este executata pentru
fiecare inregistrare candidata considarata de interogarea principala.
Cu alte cuvinte, executia subinterogarii este dictata de interogarea
principala. Este utilizata oridecate ori o subinterogare trebuie
sa intoarca diferite rezultate sau multimi de rezultate pentru fiecare
inregistrare considerata de interogarea principala.
Sintaxa generala pentru subinterogarile corelate
SELECT col1, col2,...
FROM tabel1 alias1
WHERE col i operator
( SELECT col1, col2,...
FROM tabel2
WHERE expr1 = alias1.expr2)
In interogarile corelate se pot folosi operatorii ANY si ALL.
Tipic, subinterogarile corelate se folosesc impreuna cu operatorul
EXISTS.
Exemple