Je samozrejmé, že spojenie je jednou z najidentifikovateľnejších funkcií relačných databáz. Spojenia nám umožňujú kombinovať údaje z jednej alebo viacerých tabuliek na základe súvisiacej podmienky, aby sme vytvorili koherentnú dátovú operáciu.
V SQL existujú rôzne typy spojení, z ktorých každý má jedinečný spôsob, ako narába s údajmi zo zúčastnených tabuliek alebo výslednej množiny. Jedným z najbežnejších typov spojenia v SQL je OUTER JOIN.
OUTER JOIN v SQL získa všetky zhodné riadky z príslušných tabuliek, ako aj nezhodné riadky z jednej alebo oboch tabuliek. Je to užitočné, keď sa zaoberáte tabuľkami, ktoré obsahujú hodnoty NULL alebo chýbajúce množiny.
Poďme ďalej preskúmať, čo tieto spojenia robia, ako fungujú a ako ich môžeme použiť v databáze SQL.
Požiadavky:
V tomto návode budeme pracovať s MySQL 8.0 a používať vzorovú databázu Sakila. Neváhajte však použiť akýkoľvek iný súbor údajov, ktorý považujete za vhodný.
Typy vonkajších spojení
V SQL existujú tri hlavné typy OUTER JOINS. Tieto typy VONKAJŠÍCH SPOJENÍ zahŕňajú:
-
Ľavé VONKAJŠIE SPOJENIA
-
Vpravo VONKAJŠIE SPOJENIA
-
ÚPLNÉ VONKAJŠIE SPOJENIA
V prípade LEFT OUTER JOINS spojenie získa všetky riadky z ľavej tabuľky a iba zodpovedajúce riadky z pravej tabuľky. Ak neexistujú žiadne zodpovedajúce riadky z pravej tabuľky, spojenie vráti hodnoty NULL pre stĺpce v pravej tabuľke.
Je to podobné ako pri RIGHT OUTER JOIN. Načíta však všetky riadky z pravej tabuľky, ale iba zodpovedajúce riadky z ľavej tabuľky. Ak neexistujú žiadne zodpovedajúce riadky z ľavej tabuľky, spojenie obsahuje hodnoty NULL pre stĺpce v ľavej tabuľke.
Nakoniec tu máme ÚPLNÉ VONKAJŠIE SPOJENIA. Tento typ spojenia kombinuje PRAVÉ aj ĽAVÉ vonkajšie spojenie. Výsledkom je, že spojenie načíta všetky riadky, keď sa nájde zhoda v ľavej alebo pravej tabuľke. Ak nedôjde k žiadnej zhode, spojenie vráti hodnoty NULL pre stĺpce z tabuľky bez zhody.
Syntax SQL OUTER JOIN
Nasledujúci text vyjadruje syntax SQL OUTER JOIN. Je však dobré mať na pamäti, že syntax sa môže mierne líšiť v závislosti od cieľového databázového stroja.
Nasleduje všeobecná štruktúra:
VYBERTE stĺpceZ tabuľky 1
[LEVA | SPRÁVNE | FULL] OUTER JOIN tabuľka2
ON table1.column_name = table2.column_name;
Syntax OUTER JOIN v SQL je celkom samozrejmá.
Príklady:
Pozrime sa na niektoré príklady použitia, ako môžeme použiť rôzne typy OUTER JOINS v SQL.
Ako sme spomínali, na ukážku použijeme vzorovú databázu Sakila. V tomto prípade používame tabuľky „zákazník“ a „platba“.
Príklad 1: ĽAVÉ VONKAJŠIE SPOJENIE
Začnime OUTTER JOIN. Predpokladajme, že chceme získať všetky informácie o zákazníkovi spolu s informáciami o platbe, ak sú k dispozícii.
Vďaka tomu je možné použiť ĽAVÉ VONKAJŠIE SPOJENIE, pretože chceme všetky informácie o zákazníkovi (vľavo) a informácie o platbe, ak sú k dispozícii (vpravo).
Ak zákazník neuskutočnil žiadnu platbu, spojenie zobrazí hodnoty NULL pre stĺpce súvisiace s platbou.
Príklad je nasledujúci:
VYBRAŤc.customer_id,
c.first_name,
c.priezvisko,
p.suma,
p.dátum_platby
OD
zákazník c
LEFT OUTTER JOIN platba str
ON
c.customer_id = p.customer_id;
V danom dopyte zahrnieme stĺpce „customer_id“, „first_name“ a „last_name“ z tabuľky „customer“. Zahrnieme aj sumu a „dátum_platby“ z tabuľky „platba“.
Potom vykonáme ĽAVÉ VONKAJŠIE SPOJENIE medzi tabuľkami „zákazník“ a „platba“ na základe „id_zákazníka“.
Toto sú všetci zákazníci (bez ohľadu na to, či bola platba vykonaná alebo nie) spolu s ich platobnými údajmi (ak existujú).
Príklad výstupu je nasledujúci:
Príklad 2: PRAVÉ VONKAJŠIE SPOJENIE
Teraz prejdime na PRAVÉ VONKAJŠIE PRIPOJENIE. Predpokladajme, že v tomto prípade chceme zahrnúť všetky platobné informácie a súvisiaceho zákazníka, ak nejaké existujú.
V tomto prípade, ak platbu uskutoční zákazník, pripojenie zobrazí podrobnosti tohto zákazníka. Ak existuje platba bez priradeného zákazníka, v stĺpcoch súvisiacich so zákazníkom sa zobrazia hodnoty NULL.
VYBRAŤc.customer_id,
c.first_name,
c.priezvisko,
p.suma,
p.dátum_platby
OD
zákazník c
platba RIGHT OUTER JOIN str
ON
c.customer_id = p.customer_id;
Výsledná sada je nasledovná:
Príklad 3: ÚPLNÉ VONKAJŠIE SPOJENIE
ÚPLNÉ VONKAJŠIE PRIPOJENIE na druhej strane získa všetky informácie o zákazníkovi a platbu. Toto zahŕňa všetkých zákazníkov a všetky platby a zobrazuje hodnoty NULL, ak medzi tabuľkami neexistuje žiadna zhoda.
VYBRAŤc.customer_id,
c.first_name,
c.priezvisko,
p.suma,
p.dátum_platby
OD
zákazník c
FULL OUTER JOIN platba str
ON
c.customer_id = p.customer_id;
Je dobré mať na pamäti, že MySQL natívne nepodporuje FULL OUTER JOIN. Musíte urobiť nejaké kúzlo jiujitsu s LEFT JOIN, UNION a RIGHT JOIN. Dosť nepríjemné, mohli by sme dodať.
Záver
V tomto návode sme sa dozvedeli všetko o OUTER JOINS. Naučili sme sa, čo je OUTER JOIN v SQL, typy OUTER JOINS a príklady použitia týchto typov OUTER JOINS.