Čo sa týka joinov, väčšina z nás pracuje hlavne s limitom dvoch stolov a podobne. Je však bežné, že potrebujete spojiť tri tabuľky, aby ste získali zmysluplnejšie rozloženie údajov a prehľad. Vezmime si napríklad miesto, kde chcete získať zoznam filmov, ich zodpovedajúci inventár výpožičiek a skutočné podrobnosti o výpožičke. Každá z týchto jednotiek, ako sú filmy, inventár a podrobnosti o prenájme, sú v samostatných tabuľkách.
V tomto návode vás prevedieme rôznymi spojeniami a technikami, ktoré môžete použiť na spojenie troch tabuliek v SQL.
Požiadavky:
Na demonštračné účely použijeme MySQL verziu 80 a vzorovú databázu Sakila. Ak chcete pokračovať, môžete si stiahnuť a nastaviť databázu Sakila na serveri MySQL. Neváhajte použiť akýkoľvek iný súbor údajov, ktorý považujete za vhodný.
Typy spojení v SQL
Predtým, ako sa dostaneme k aplikácii spojení, začnime diskusiou o rôznych typoch spojení, ktoré sú dostupné v databázach SQL.
VNÚTORNÉ SPOJENIE
Prvým typom spojenia je INNER JOIN. Tento typ spojenia vráti iba riadky, ktoré obsahujú zhodnú hodnotu v oboch tabuľkách. Je to veľmi bežný typ spojenia a je najjednoduchší pri spájaní dvoch tabuliek.
Syntax je nasledovná:
VYBERTE stĺpceZ tabuľky 1
Tabuľka INNER JOIN2 ON table1.column_name = table2.column_name;
ĽAVÉ PRIPOJENIE
V prípade LEFT JOIN vráti všetky riadky z ľavej tabuľky a zhodné riadky z pravej tabuľky. Ak neexistujú žiadne zodpovedajúce hodnoty z pravej tabuľky, spojenie pridá na ich miesto hodnoty NULL.
Syntax je nasledovná:
VYBERTE stĺpceZ tabuľky 1
LEFT JOIN table2 ON table1.column_name = table2.column_name;
SPRÁVNE PRIPOJTE SA
Ako môžete hádať, RIGHT JOIN je opakom LEFT JOIN. Tento typ spojení vráti všetky riadky z pravej tabuľky a iba zodpovedajúce riadky z ľavej tabuľky. Ak v ľavej tabuľke nie sú žiadne zodpovedajúce riadky, spojenie do nej pridá hodnoty NULL.
Nasleduje syntax RIGHT JOIN:
VYBERTE stĺpceZ tabuľky 1
Tabuľka RIGHT JOIN2 ON table1.column_name = table2.column_name;
ÚPLNÉ VONKAJŠIE SPOJENIE
Ďalším typom spojenia, s ktorým sa stretnete v SQL databázach, je FULL OUTER JOIN. Tento typ spojenia vráti všetky riadky, keď sa nájde zhoda v pravej alebo ľavej tabuľke. Ak nie je žiadna zhodná hodnota v žiadnom z týchto dvoch, vráti hodnotu NULL pre stĺpce z tabuľky bez zhody.
Nasledujúci text demonštruje syntax FULL OUTER JOIN:
VYBERTE stĺpceZ tabuľky 1
Tabuľka FULL OUTER JOIN2 ON table1.column_name = table2.column_name;
Je dobré mať na pamäti, že nie všetky databázové nástroje podporujú FULL OUTER JOINS. Aby ste to dosiahli, možno budete musieť pracovať s inými typmi JOINS alebo poddotazov.
Príklady:
Pozrime sa na niekoľko príkladov, ako môžeme použiť tieto typy spojení na spojenie troch tabuliek v SQL.
Príklad 1: Použitie INNER JOIN
Začíname INNER JOIN. Predpokladajme, že chceme získať zoznam filmov, inventár výpožičiek a príslušné podrobnosti o výpožičke.
Môžeme použiť viacero INNER JOINS na súvisiacich tabuľkách, ako je znázornené v nasledujúcom príklade:
VYBRAŤfilm.title,
inventar.inventory_id,
prenájom.dátum_prenájmu
OD
film
INNER JOIN inventár ON
film.film_id = inventar.film_id
Prenájom INNER JOIN ON
inventar.id_zasob = prenajom.id_zasob;
V uvedenom príklade dopytu začneme spojením tabuliek filmu a inventára na základe stĺpca „film_id“. Potom vezmeme výslednú sadu a spojíme ju s tabuľkou prenájmu na základe stĺpca „id_inventáru“.
Tým sa zabezpečí, že tri stoly spojíme základným INNER JOINom. Výsledná sada je nasledovná:
Príklad 2: Použitie INNER JOIN a LEFT JOIN
Povedzme, že teraz chceme zoznam filmov, zoznam výpožičiek (ak nejaké existujú) a súvisiace podrobnosti o výpožičke.
Chceme sa tiež uistiť, že aj keď film nemá inventár na prenájom, stále ho zahrnieme do výsledku. Tu prichádza na rad INNER JOIN a LEFT JOIN.
Zvážte nasledujúci príklad:
VYBRAŤfilm.title,
inventar.inventory_id,
prenájom.dátum_prenájmu
OD
film
INNER JOIN inventár ON
film.film_id = inventar.film_id
LEFT JOIN prenájom ON
inventar.id_zasob = prenajom.id_zasob;
V tomto príklade používame INNER JOIN na pripojenie k tabuľke filmu a inventára, aby sme zaistili, že získame tituly s dostupným inventárom. Potom použijeme LEFT JOIN, aby sme sa pripojili k tabuľke prenájmu, aby sme získali podrobnosti o prenájme, ak sú k dispozícii, a NULL pre akýkoľvek titul, ktorý nemá históriu prenájmu.
Výsledná sada je nasledovná:
Záver
V tomto návode sme sa dozvedeli o rôznych typoch JOINS v SQL, ako fungujú a ako ich môžeme použiť na spojenie troch tabuliek.