logo

Korelované poddotazy SQL

V SQL je korelovaný poddotaz poddotaz, který odkazuje na sloupec z vnějšího dotazu. Poddotaz se provádí opakovaně pro každý řádek vnějšího dotazu, přičemž k provedení poddotazu se používají hodnoty z aktuálního řádku. Výsledek poddotazu se pak použije při vyhodnocení vnějšího dotazu.

Korelované poddotazy se používají pro zpracování po řádcích. Každý poddotaz se provede jednou pro každý řádek vnějšího dotazu.



Korelovaný poddotaz je vyhodnocen jednou pro každý řádek zpracovaný nadřazeným příkazem. Rodičovský příkaz může být a VYBRAT , AKTUALIZACE nebo VYMAZAT prohlášení.

Syntax:

VYBERTE sloupec1, sloupec2, ….

Z vnější tabulky 1



Operátor WHERE sloupec1

(VYBRAT sloupec1, sloupec2

Z tabulky 2



KDE expr1 =

vnější.expr2);

Korelovaný poddotaz je jedním ze způsobů čtení každého řádku v tabulce a porovnání hodnot v každém řádku se souvisejícími daty. Používá se vždy, když poddotaz musí vrátit jiný výsledek nebo sadu výsledků pro každý kandidátský řádek uvažovaný hlavním dotazem. Jinými slovy, můžete použít korelovaný poddotaz k zodpovězení vícedílné otázky, jejíž odpověď závisí na hodnotě v každém řádku zpracovaném nadřazeným příkazem.

Vnořené poddotazy versus korelované poddotazy

U normálního vnořeného poddotazu je vnitřní VYBRAT dotaz se spustí jako první a provede se jednou a vrátí hodnoty, které má použít hlavní dotaz. Korelovaný poddotaz se však provede jednou pro každý kandidátský řádek uvažovaný vnějším dotazem. Jinými slovy, vnitřní dotaz je řízen vnějším dotazem.

POZNÁMKA: Můžete také použít ŽÁDNÝ a VŠECHNO operátor v korelovaném poddotazu. PŘÍKLAD korelovaných poddotazů : Najděte všechny zaměstnance, kteří vydělávají více, než je průměrná mzda v jejich oddělení.

Dotaz:

SELECT last_name, salary, department_id  FROM employees outer  WHERE salary>(SELECT AVG(plat) FROM zaměstnanců WHERE oddělení_id = vnější.id_oddělení skupina podle id_oddělení);>

Jiné použití korelace je in AKTUALIZACE a VYMAZAT

SOUVISEJÍCÍ AKTUALIZACE

UPDATE table1 alias1  SET column = (SELECT expression   FROM table2 alias2  WHERE alias1.column =  alias2.column);>

Pomocí korelovaného poddotazu aktualizujte řádky v jedné tabulce na základě řádků z jiné tabulky.

SOUVISEJÍCÍ SMAZÁNÍ

DELETE FROM table1 alias1  WHERE column1 operator  (SELECT expression  FROM table2 alias2  WHERE alias1.column = alias2.column);>

Pomocí korelovaného poddotazu odstraňte řádky v jedné tabulce na základě řádků z jiné tabulky.

java webové služby

Použití operátora EXISTS

Operátor EXISTS testuje existenci řádků v sadě výsledků poddotazu. Pokud je nalezena hodnota řádku poddotazu, podmínka je označena příznakem SKUTEČNÝ a hledání nepokračuje ve vnitřním dotazu, a pokud není nalezen, je podmínka označena příznakem NEPRAVDIVÉ a hledání pokračuje ve vnitřním dotazu.
PŘÍKLAD použití operátoru EXIST :
Najděte zaměstnance, kterým se hlásí alespoň jedna osoba.

Dotaz:

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ÝSTUP :

PŘÍKLAD použití operátoru NOT EXIST
Najděte všechna oddělení, která nemají žádné zaměstnance.

Dotaz:

SELECT department_id, department_name FROM departments d WHERE NOT EXISTS (SELECT ’X’ FROM employees WHERE department_id = d.department_id);>

VÝSTUP :

Často kladené otázky týkající se poddotazů souvisejících s SQL – FAQ

Jaký je rozdíl mezi korelovanými poddotazy a běžnými poddotazy?

Běžné poddotazy (nekorelované) jsou nezávislé na vnějším dotazu a jsou vyhodnocovány pouze jednou před spuštěním hlavního dotazu. Naproti tomu korelované poddotazy jsou závislé na vnějším dotazu a jsou prováděny pro každý řádek hlavního dotazu.

Kdy mám použít korelované poddotazy?

Korelované poddotazy jsou užitečné, když potřebujete filtrovat výsledek vnějšího dotazu na základě nějaké podmínky, která vyžaduje odkazování na hodnoty ze samotného vnějšího dotazu. Běžně se používají ve scénářích, kde podmínka závisí na datech ze souvisejících tabulek.