V SQL je korelirana podpoizvedba podpoizvedba, ki se nanaša na stolpec iz zunanje poizvedbe. Podpoizvedba se izvede večkrat za vsako vrstico zunanje poizvedbe z uporabo vrednosti iz trenutne vrstice za izvedbo podpoizvedbe. Rezultat podpoizvedbe se nato uporabi pri vrednotenju zunanje poizvedbe.
Korelirane podpoizvedbe se uporabljajo za obdelavo vrstice za vrstico. Vsaka podpoizvedba se izvede enkrat za vsako vrstico zunanje poizvedbe.
Korelirana podpoizvedba se ovrednoti enkrat za vsako vrstico, ki jo obdela nadrejeni stavek. Nadrejena izjava je lahko a IZBERI , NADGRADNJA , oz IZBRIŠI izjava.
Sintaksa:
IZBERI stolpec1, stolpec2, ….
IZ table1 zunanja
Operator stolpca WHERE1
(IZBERI stolpec1, stolpec2
IZ tabele 2
WHERE izraz1 =
zunanji.izraz2);
Korelirana podpoizvedba je eden od načinov branja vsake vrstice v tabeli in primerjave vrednosti v vsaki vrstici s povezanimi podatki. Uporablja se vedno, ko mora podpoizvedba vrniti drugačen rezultat ali nabor rezultatov za vsako kandidatno vrstico, ki jo obravnava glavna poizvedba. Z drugimi besedami, lahko uporabite korelirano podpoizvedbo, da odgovorite na večdelno vprašanje, katerega odgovor je odvisen od vrednosti v vsaki vrstici, ki jo obdela nadrejeni stavek.
Ugnezdene podpoizvedbe v primerjavi s koreliranimi podpoizvedbami
Z običajno ugnezdeno podpoizvedbo, notranja IZBERI poizvedba se najprej zažene in izvede enkrat ter vrne vrednosti, ki jih uporabi glavna poizvedba. Korelirana podpoizvedba pa se izvede enkrat za vsako kandidatno vrstico, ki jo upošteva zunanja poizvedba. Z drugimi besedami, notranjo poizvedbo poganja zunanja poizvedba.
OPOMBA: Uporabite lahko tudi KAJ in VSE v korelirani podpoizvedbi. PRIMER koreliranih podpoizvedb: Poiščite vse zaposlene, ki zaslužijo več od povprečne plače v svojem oddelku.
poizvedba:
SELECT last_name, salary, department_id FROM employees outer WHERE salary>(SELECT AVG(plača) FROM zaposlenih WHERE department_id = outer.department_id skupina po department_id);>
Druga uporaba korelacije je v NADGRADNJA in IZBRIŠI
POVEZANA POSODOBITEV
UPDATE table1 alias1 SET column = (SELECT expression FROM table2 alias2 WHERE alias1.column = alias2.column);>
Uporabite korelirano podpoizvedbo za posodobitev vrstic v eni tabeli na podlagi vrstic iz druge tabele.
KORELACIJSKO IZBRISANJE
DELETE FROM table1 alias1 WHERE column1 operator (SELECT expression FROM table2 alias2 WHERE alias1.column = alias2.column);>
Uporabite korelirano podpoizvedbo za brisanje vrstic v eni tabeli na podlagi vrstic iz druge tabele.
risanje pravokotnika gimp
Uporaba operatorja EXISTS
Operator EXISTS preveri obstoj vrstic v nizu rezultatov podpoizvedbe. Če je najdena vrednost vrstice podpoizvedbe, je pogoj označen PRAV in iskanje se ne nadaljuje v notranji poizvedbi, in če ni najdeno, je pogoj označen LAŽNO in iskanje se nadaljuje v notranji poizvedbi.
PRIMER uporabe operatorja EXIST:
Poiščite zaposlene, ki jim poroča vsaj ena oseba.
poizvedba:
SELECT employee_id, last_name, job_id, department_id FROM employees outer WHERE EXISTS ( SELECT ’X’ FROM employees WHERE manager_id = outer.employee_id);>
IZHOD:

PRIMER uporabe operatorja NOT EXIST
Poiščite vse oddelke, ki nimajo zaposlenih.
poizvedba:
SELECT department_id, department_name FROM departments d WHERE NOT EXISTS (SELECT ’X’ FROM employees WHERE department_id = d.department_id);>
IZHOD:

Pogosto zastavljena vprašanja o koreliranih podpoizvedbah SQL – pogosta vprašanja
Kakšna je razlika med koreliranimi podpoizvedbami in navadnimi podpoizvedbami?
Običajne podpoizvedbe (nekorelirane) so neodvisne od zunanje poizvedbe in se ovrednotijo samo enkrat, preden se zažene glavna poizvedba. Nasprotno pa so korelirane podpoizvedbe odvisne od zunanje poizvedbe in se izvajajo za vsako vrstico glavne poizvedbe.
Kdaj naj uporabim povezane podpoizvedbe?
Korelirane podpoizvedbe so uporabne, ko morate filtrirati rezultat zunanje poizvedbe na podlagi nekega pogoja, ki zahteva sklicevanje na vrednosti iz same zunanje poizvedbe. Običajno se uporabljajo v scenarijih, kjer se pogoj opira na podatke iz povezanih tabel.