SQL Subquery Join with Outer Query

Sql Subquery Join With Outer Query



Pokiaľ ide o prácu s relačnými databázami, musíte ovládať, ako manipulovať a kombinovať dotazy, aby ste mohli vykonávať úlohy, ktoré chcete. To je dôvod, prečo každý relačný databázový stroj implementuje svoju príchuť jazyka SQL tým, že sa snaží svojim používateľom poskytnúť výnimočné vlastnosti, efektivitu a jednoduchosť použitia.

Jednou z najvýkonnejších funkcií SQL sú poddotazy. Poddotazy sú množinou vnorených dotazov v rámci väčšieho a komplexnejšieho dotazu. Poddotazy vám umožňujú získať údaje alebo vykonávať zložitejšie operácie ako jeden celok.







Poddotazy môžeme použiť na filtrovanie údajov, triedenie, agregáciu na viacerých tabuľkách a ďalšie.



Avšak ďalšia funkcia, ktorá je skrytá pod poddotazmi SQL, je známa ako spojenia poddotazov. Sú podobné ako poddotazy; namiesto toho sú to spojenia, ktoré vám umožňujú použiť poddotazy v rámci vonkajšieho dotazu na spojenie tabuliek.



Ak sa vám točí hlava, nebojte sa, pretože zvládnutie spájania poddotazov môže byť náročné, najmä na začiatku. Tento návod sa však pokúša rozobrať spojenia poddotazov v základných krokoch bez toho, aby príliš veľa ponechal náhode.





Majte na pamäti, že predpokladáme, že nie ste nováčikom v oblasti SQL, SQL Joins, SQL Subqueries a podobne. Ak však áno, pozrite si naše návody na témy, aby ste zistili viac.

Zvládnite vonkajšie spojenia SQL

Ak chcete pochopiť, ako pracovať so spojeniami poddotazov, kľúčovým faktorom je naučiť sa pracovať s vonkajšími spojeniami.



Ak nie ste oboznámení, vonkajšie spojenie SQL vám umožní načítať všetky riadky z jednej tabuľky a zodpovedajúce riadky z druhej tabuľky. Je to o niečo zložitejšie, vrátane ľavého vonkajšieho spojenia, pravého vonkajšieho spojenia, úplného vonkajšieho spojenia atď.

V ľavom vonkajšom spojení SQL dotaz vráti všetky riadky z ľavej tabuľky a zodpovedajúce riadky z pravej tabuľky. Dotaz obsahuje hodnoty NULL vo výsledných stĺpcoch, ak v pravej tabuľke nie sú žiadne zodpovedajúce riadky.

V prípade pravého vonkajšieho spojenia dotaz vráti všetky riadky z pravej tabuľky, ale iba zodpovedajúce riadky z ľavej tabuľky. Podobne dotaz obsahuje hodnoty NULL, ak neexistujú žiadne zodpovedajúce riadky z ľavej tabuľky.

Nakoniec máme úplné vonkajšie spojenie. Toto spojenie vráti všetky riadky z pravej a ľavej tabuľky a hodnoty NULL pre všetky nezhodné záznamy.

SQL Subquery Joins

Teraz, keď rozumieme poddotazom SQL, povedzme si o spojeniach poddotazov. Spojenia poddotazov nám umožňujú použiť poddotazy v rámci vonkajšieho dotazu na spojenie tabuliek.

Ak sa pýtate, je to tak? Áno, to je všetko, čo spojenia poddotazov robia.

Aby ste to lepšie demonštrovali, vezmite si nasledujúci príklad syntaxe, ktorý je znázornený v nasledujúcom texte:

VYBRAŤ *
Z tabuľky 1
ĽAVÉ VONKAJŠIE SPOJENIE (
VYBERTE stĺpec1, stĺpec2
Z tabuľky 2
) AS poddotaz
ON tabuľka1.stĺpec3 = poddotaz.stĺpec1;


V predchádzajúcej syntaxi vyberieme všetky stĺpce z tabuľky 1 pomocou ľavého vonkajšieho spojenia, aby sme ju spojili s poddotazom. Úlohou poddotazu je získať definované stĺpce z tabuľky 2. Potom ho spojíme s tabuľkou 1 za podmienky stĺpca 2 z tabuľky 1 a stĺpca 1 z poddotazu.

Praktický príklad:

Teoreticky sa to zdá byť menej intuitívne, ale zoberme si scenár zo skutočného sveta pomocou databázy Sakila.

Predpokladajme, že chceme získať zoznam všetkých filmov v databáze a ich príslušné jazyky. Jazyky filmov sú uložené v tabuľke jazykov a názvy filmov sú uložené v tabuľke filmov.

Tabuľka filmov však obsahuje cudzí kľúč, ktorý sa nazýva stĺpec „id_jazyka“ z tabuľky jazykov. Preto môžeme použiť spojenie poddotazu s ľavým vonkajším spojením na spojenie dvoch tabuliek dohromady, ako je to znázornené v nasledujúcom dotaze:

SELECT titulok, meno AS jazyk
Z filmu f
ĽAVÉ VONKAJŠIE SPOJENIE (
SELECT language_id, name
Z jazyka
) AS l
ON f.language_id = l.language_id;


V predchádzajúcom vzorovom dotaze vyberieme stĺpec názvu z tabuľky filmov a stĺpec názvu z tabuľky jazykov.

Potom použijeme poddotaz na výber stĺpca language_id a name z tabuľky jazykov. Ďalším krokom je spojenie s tabuľkou filmov pod podmienkou, že language_id z tabuľky filmov sa rovná language_id z jazykovej tabuľky.

Aby sme zabezpečili, že do výsledku budú zahrnuté všetky filmy, musíme použiť ľavé vonkajšie spojenie, ktoré pozostáva zo všetkých výsledkov z ľavej tabuľky, čo je v tomto prípade tabuľka filmov.

Príklad výstupu je nasledujúci:


To isté môžeme urobiť aj s pravým vonkajším spojom. Syntax je nasledovná:

VYBRAŤ *
Z tabuľky 1
PRAVÝ VONKAJŠÍ SPOJ (
VYBERTE stĺpec1, stĺpec2
Z tabuľky 2
) AS poddotaz
ON tabuľka1.stĺpec3 = poddotaz.stĺpec1;


Správa sa podobne, ale zahŕňa všetky záznamy v pravej tabuľke, aj keď neexistujú žiadne zodpovedajúce záznamy.

Užitočné veci, ktoré by ste mali vedieť

Je dobré pochopiť, že hoci sú spojenia poddotazov neuveriteľne užitočné a môžu optimalizovať váš pracovný tok, používajte ich opatrne.

Vyhnite sa napríklad používaniu spojení poddotazov s veľkou množinou údajov. Je to preto, že môžu vrátiť rozsiahle záznamy, ktoré môžu ovplyvniť výkon databázy.

Pred vykonaním akýchkoľvek spojení poddotazov zvážte použitie nástrojov na analýzu dotazov.

Záver

Tento tutoriál skúmal základy práce s poddotazmi a spojeniami poddotazov v SQL. Na konci tohto tutoriálu teraz chápete, ako pracovať so spojeniami poddotazov, prečo ich možno budete musieť použiť, a praktický príklad toho, ako vám môžu pomôcť vo vašom pracovnom postupe.