SQL Subquery Join with Outer Query

Sql Subquery Join With Outer Query



Pokud jde o práci s relačními databázemi, musíte zvládnout, jak manipulovat a kombinovat dotazy, abyste mohli provádět úkoly, které si přejete. To je důvod, proč každý relační databázový stroj implementuje svou příchuť jazyka SQL tím, že se snaží svým uživatelům poskytnout výjimečné funkce, efektivitu a snadné použití.

Jednou z nejvýkonnějších funkcí SQL jsou poddotazy. Poddotazy jsou sada vnořených dotazů v rámci většího a složitějšího dotazu. Poddotazy vám umožňují získávat data nebo provádět složitější operace jako jedna entita.







Pomocí poddotazů můžeme provádět filtrování dat, řazení, agregaci na více tabulkách a další.



Další funkce, která je skryta pod poddotazy SQL, je však známá jako spojení poddotazů. Jsou podobné jako poddotazy; místo toho jsou to spojení, která vám umožňují použít poddotazy v rámci vnějšího dotazu ke spojení tabulek.



Pokud se vám točí hlava, nemějte obavy, protože zvládnutí spojení poddotazů může být náročné, zvláště na začátku. Tento výukový program se však pokouší rozdělit spojení poddotazů v základních krocích, aniž by ponechal příliš mnoho náhodě.





Mějte na paměti, že předpokládáme, že nejste nováčkem v SQL, SQL Joins, SQL Subdotazy a podobně. Pokud však ano, podívejte se na naše výukové programy k tématům, abyste zjistili více.

Zvládněte vnější spojení SQL

Pokud chcete pochopit, jak pracovat se spojeními poddotazů, je klíčovým faktorem naučit se pracovat s vnějšími spojeními.



Pokud nejste obeznámeni, vnější spojení SQL vám umožní načíst všechny řádky z jedné tabulky a odpovídající řádky z druhé tabulky. Je to trochu složitější, včetně levého vnějšího spojení, pravého vnějšího spojení, úplného vnějšího spojení atd.

V levém vnějším spojení SQL dotaz vrátí všechny řádky z levé tabulky a odpovídající řádky z pravé tabulky. Dotaz obsahuje hodnoty NULL ve výsledných sloupcích, pokud v pravé tabulce nejsou žádné odpovídající řádky.

V případě pravého vnějšího spojení dotaz vrátí všechny řádky z pravé tabulky, ale pouze odpovídající řádky z levé tabulky. Podobně dotaz obsahuje hodnoty NULL, pokud neexistují žádné odpovídající řádky z levé tabulky.

Konečně máme úplné vnější spojení. Toto spojení vrátí všechny řádky z pravé a levé tabulky a hodnoty NULL pro všechny neodpovídající záznamy.

SQL Subquery Joins

Nyní, když rozumíme poddotazům SQL, pojďme mluvit o spojení poddotazů. Spojení poddotazů nám umožňují použít poddotazy v rámci vnějšího dotazu ke spojení tabulek.

Pokud se ptáte, je to tak? Ano, to je vše, co spojení poddotazů dělá.

Chcete-li to lépe demonstrovat, vezměte si následující příklad syntaxe, který je znázorněn v následujícím:

VYBRAT *
Z tabulky 1
LEVÁ VNĚJŠÍ SPOJENÍ (
VYBERTE sloupec1, sloupec2
Z tabulky 2
) AS dílčí dotaz
ON tabulka1.sloupec3 = dílčí dotaz.sloupec1;


V předchozí syntaxi vybereme všechny sloupce z tabulky jedna pomocí levého vnějšího spojení, abychom ji spojili s poddotazem. Úlohou poddotazu je načíst definované sloupce z tabulky 2. Poté jej spojíme s tabulkou 1 za podmínky sloupce 2 z tabulky 1 a sloupce 1 z poddotazu.

Praktický příklad:

Teoreticky se to zdá méně intuitivní, ale vezmeme si scénář ze skutečného světa a vezmeme si databázi Sakila.

Předpokládejme, že chceme získat seznam všech filmů v databázi a jejich příslušné jazyky. Jazyky filmů jsou uloženy v jazykové tabulce a názvy filmů jsou uloženy v tabulce filmů.

Tabulka filmů však obsahuje cizí klíč zvaný sloupec „id_jazyka“ z jazykové tabulky. Proto můžeme použít spojení poddotazu s levým vnějším spojením ke spojení dvou tabulek dohromady, jak ukazuje následující dotaz:

VYBERTE titulek, jméno AS jazyk
Z filmu f
LEVÁ VNĚJŠÍ SPOJENÍ (
SELECT language_id, name
Z jazyka
) AS l
ON f.id_jazyka = l.id_jazyka;


V předchozím příkladu dotazu vybereme sloupec nadpis z tabulky filmů a sloupec název z jazykové tabulky.

Poté pomocí poddotazu vybereme sloupec language_id a name z tabulky jazyků. Dalším krokem je spojení s tabulkou filmů za podmínky, že language_id z filmové tabulky se rovná language_id z jazykové tabulky.

Abychom zajistili, že do výsledku budou zahrnuty všechny filmy, musíme použít levé vnější spojení, které se skládá ze všech výsledků z levé tabulky, což je v tomto případě tabulka filmů.

Příklad výstupu je následující:


Totéž můžeme udělat také s pravým vnějším spojením. Syntaxe je následující:

VYBRAT *
Z tabulky 1
PRAVÝ VNĚJŠÍ SPOJ (
VYBERTE sloupec1, sloupec2
Z tabulky 2
) AS dílčí dotaz
ON tabulka1.sloupec3 = dílčí dotaz.sloupec1;


To se chová podobně, ale zahrnuje všechny záznamy v pravé tabulce, i když neexistují žádné odpovídající záznamy.

Užitečné informace

Je dobré pochopit, že ačkoli jsou spojení poddotazů neuvěřitelně užitečná a mohou optimalizovat váš pracovní postup, používejte je opatrně.

Vyhněte se například použití spojení poddotazů s velkou datovou sadou. Je to proto, že mohou vrátit rozsáhlé záznamy, které mohou ovlivnit výkon databáze.

Před provedením jakýchkoli spojení poddotazů zvažte použití nástrojů pro analýzu dotazů.

Závěr

Tento kurz prozkoumal základy práce s poddotazy a spojeními poddotazů v SQL. Na konci tohoto kurzu nyní chápete, jak pracovat se spojeními poddotazů, proč je možná budete muset použít, a praktický příklad toho, jak vám mohou pomoci ve vašem pracovním postupu.