Spojte tri tabuľky v SQL

Spojte Tri Tabulky V Sql



V relačných databázach je úloha získavania údajov z viacerých tabuliek mimoriadne bežná. V závislosti od cieľového výsledku to zahŕňa spojenie viacerých tabuliek do jednej jednotky a načítanie výsledných údajov.

Č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ĺpce

Z 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ĺpce

Z 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ĺpce

Z 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ĺpce

Z 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.