Jaké jsou korelované poddotazy?

Korelový poddotaz je propracované použití SQL.

SQL

Nejmodernější relační databáze zahrnují SQL pro přidávání a aktualizaci dat, vytváření struktur a shromažďování informací. SQL je založen na teoriích o datech vyvinutých v 70. letech a od té doby je neustále vylepšován. Skládá se ze souboru stavů, včetně SELECT, INSERT, CREATE a DELETE, následovaných několika klauzulemi, které specifikují spravovaná data a možnosti, například třídění a seskupení. Široké využití databází je způsobeno flexibilitou a sofistikací SQL; Umožňuje organizacím analyzovat složité datové skupiny mnoha způsoby.

Dotazy a poddotazy

Příkaz SQL pro načtení dat se nazývá dotaz. Programátoři typicky používají příkaz SELECT dotazů, i když mnoho pravidel pro vyhledávání dat platí také pro INSERT, DELETE a UPDATE. Jednoduchý dotaz SELECT může zobrazit obsah datové tabulky, například následující příkaz:

SELECT * Z inventáře;

Tento dotaz zobrazuje všechny záznamy v tabulce nazvané "Inventář" Můžete získat výsledky z konkrétnějšího dotazu přidáním podmíněných testů, jako v tomto příkazu "inventář":

SELECT * Z inventáře WHERE warehouse_code = 'chicago5';

Toto prohlášení zobrazuje záznamy o inventáři kódu vkladu, chicago5.

Poddotaz je dotaz v rámci jiného dotazu. Následující výkaz obsahuje seznam inventarizace těch položek, které jsou uloženy v určité oblasti:

SELECT * Z inventáře WHERE warehouse_code IN (SELECT warehouse_code ze skladeb WHERE region = 'midwest');

Všimněte si, že tento dotaz má dvě příkazy SELECT, jednu, která zobrazuje záznamy o inventáři a další, které určují hlavní dotaz s kódem vkladů.

Související poddotaz

V korelovaném poddotazoru získávají hlavní a podřízené dotazy data ze stejné tabulky. Interní dotaz provádí souhrnnou funkci, jako je statistika, a přivádí tuto informaci externímu dotazu, který ji používá jako základ pro porovnání. Tento korelovaný poddotaz vytváří například seznam záznamů o inventáři pro položky s cenami nad průměrem vkladu. Externí dotaz předává informace z vkladu do interního dotazu a interní dotaz odešle průměrnou cenu zpět na externí dotaz:

SELECT part_number, price, warehouse_code Z inventáře i1 WHERE cena> (SELECT AVG (cena) Z inventáře i2 WHERE warehouse_code.i1 = warehouse_code.i2);

Dvě dotazy používají aliasové tabulky "I1" a "I2". Přestože odkazují na stejnou tabulku, použití aliasu umožňuje, aby dotazy byly považovány za dva samostatné entity.

Nevýhody provozu

Pro korelované poddotazy vyhodnotí SQL interní dotaz jednou pro každý záznam ve vnějším dotazu. Když se velikost tabulek zvětší, proces trvá více času. Pokud zjistíte, že korelovaný poddotaz trvá příliš dlouho, než se dokončí, zvažte použití alternativy, jako je načítání dočasné tabulky s přechodnými výsledky a následné zpracování dočasné tabulky přímo na hlavní tabulku pomocí jednoduchého poddotazování. I když je méně elegantní, může být mnohem rychlejší.