V SQL je korelovaný poddotaz poddotaz, ktorý odkazuje na stĺpec z vonkajšieho dotazu. Poddotaz sa vykoná opakovane pre každý riadok vonkajšieho dotazu, pričom na vykonanie poddotazu sa použijú hodnoty z aktuálneho riadka. Výsledok poddotazu sa potom použije pri vyhodnotení vonkajšieho dotazu.
Korelované poddotazy sa používajú na spracovanie po riadkoch. Každý poddotaz sa vykoná raz pre každý riadok vonkajšieho dotazu.
Korelovaný poddotaz sa vyhodnotí raz pre každý riadok spracovaný nadradeným príkazom. Rodičovský príkaz môže byť a SELECT , AKTUALIZOVAŤ , alebo VYMAZAŤ vyhlásenie.
Syntax:
VYBERTE stĺpec1, stĺpec2, ….
Z vonkajšej tabuľky 1
Operátor WHERE stĺpec1
(VYBERTE stĺpec1, stĺpec2
Z tabuľky 2
KDE expr1 =
vonkajší.expr2);
Korelovaný poddotaz je jedným zo spôsobov čítania každého riadka v tabuľke a porovnávania hodnôt v každom riadku so súvisiacimi údajmi. Používa sa vždy, keď poddotaz musí vrátiť iný výsledok alebo množinu výsledkov pre každý kandidátsky riadok, ktorý sa zvažuje v hlavnom dotaze. Inými slovami, korelovaný poddotaz môžete použiť na zodpovedanie viacdielnej otázky, ktorej odpoveď závisí od hodnoty v každom riadku spracovanom nadradeným príkazom.
Vnorené poddotazy verzus korelované poddotazy
Pri normálnom vnorenom poddotaze je vnútorný SELECT dotaz sa spustí ako prvý a vykoná sa raz, pričom vráti hodnoty, ktoré má použiť hlavný dotaz. Korelovaný poddotaz sa však vykoná raz pre každý kandidátsky riadok posudzovaný vonkajším dotazom. Inými slovami, vnútorný dotaz je riadený vonkajším dotazom.
POZNÁMKA: Môžete tiež použiť AKÝKOĽVEK a VŠETKY operátor v korelovanom poddotaze. PRÍKLAD korelovaných poddotazov : Nájdite všetkých zamestnancov, ktorí zarábajú viac ako je priemerná mzda v ich oddelení.
Dopyt:
SELECT last_name, salary, department_id FROM employees outer WHERE salary>(SELECT AVG(plat) FROM zamestnancov WHERE department_id = external.department_id group by department_id);>
Iné využitie korelácie je v AKTUALIZOVAŤ a VYMAZAŤ
SÚVISIACE AKTUALIZÁCIE
UPDATE table1 alias1 SET column = (SELECT expression FROM table2 alias2 WHERE alias1.column = alias2.column);>
Použite korelovaný poddotaz na aktualizáciu riadkov v jednej tabuľke na základe riadkov z inej tabuľky.
SÚVISIACE VYMAZANIE
DELETE FROM table1 alias1 WHERE column1 operator (SELECT expression FROM table2 alias2 WHERE alias1.column = alias2.column);>
Použite korelovaný poddotaz na odstránenie riadkov v jednej tabuľke na základe riadkov z inej tabuľky.
ako vybrať stĺpce z rôznych tabuliek v sql
Používanie operátora EXISTS
Operátor EXISTS testuje existenciu riadkov v sade výsledkov poddotazu. Ak sa nájde hodnota riadka poddotazu, stav je označený príznakom PRAVDA a hľadanie nepokračuje vo vnútornom dotaze a ak sa nenájde, podmienka je označená príznakom FALSE a hľadanie pokračuje vo vnútornom dotaze.
PRÍKLAD použitia operátora EXIST:
Nájdite zamestnancov, ktorým sa hlási aspoň jedna osoba.
Dopyt:
SELECT employee_id, last_name, job_id, department_id FROM employees outer WHERE EXISTS ( SELECT ’X’ FROM employees WHERE manager_id = outer.employee_id);>
VÝKON :

PRÍKLAD použitia operátora NOT EXIST
Nájdite všetky oddelenia, ktoré nemajú žiadnych zamestnancov.
Dopyt:
SELECT department_id, department_name FROM departments d WHERE NOT EXISTS (SELECT ’X’ FROM employees WHERE department_id = d.department_id);>
VÝKON :

Často kladené otázky týkajúce sa poddotazov súvisiacich s SQL – často kladené otázky
Aký je rozdiel medzi korelovanými poddotazmi a bežnými poddotazmi?
Bežné poddotazy (nekorelované) sú nezávislé od vonkajšieho dotazu a vyhodnocujú sa iba raz pred spustením hlavného dotazu. Naproti tomu korelované poddotazy sú závislé od vonkajšieho dotazu a vykonávajú sa pre každý riadok hlavného dotazu.
Kedy by som mal použiť korelované poddotazy?
Korelované poddotazy sú užitočné, keď potrebujete filtrovať výsledok vonkajšieho dotazu na základe nejakej podmienky, ktorá vyžaduje odkazovanie na hodnoty zo samotného vonkajšieho dotazu. Bežne sa používajú v scenároch, kde podmienka závisí od údajov zo súvisiacich tabuliek.