Ko gre za združevanja, večina od nas večinoma dela z omejitvijo dveh tabel in podobno. Vendar pa je običajno treba združiti tri tabele, da bi pridobili bolj smiselno postavitev podatkov in vpogled. Vzemimo na primer mesto, kjer želite pridobiti seznam filmov, njihov ustrezen inventar za izposojo in dejanske podrobnosti o izposoji. Vsaka od teh enot, kot so filmi, inventar in podrobnosti izposoje, je v posameznih tabelah.
V tej vadnici vas bomo popeljali skozi različna združevanja in tehnike, ki jih lahko uporabite za združevanje treh tabel v SQL.
Zahteve:
Za namene predstavitve bomo uporabili MySQL različico 80 in vzorčno bazo podatkov Sakila. Za nadaljevanje lahko prenesete in nastavite bazo podatkov Sakila v svojem strežniku MySQL. Uporabite lahko kateri koli drug nabor podatkov, za katerega menite, da je primeren.
Vrste združevanj v SQL
Preden preidemo na uporabo združevanj, začnimo z razpravo o različnih vrstah združevanj, ki so na voljo v bazah podatkov SQL.
NOTRANJI SPOJ
Prva vrsta združevanja je INNER JOIN. Ta vrsta združevanja vrne samo vrstice, ki vsebujejo ujemajočo se vrednost v obeh tabelah. Je zelo pogosta vrsta združevanja in je najbolj poenostavljena pri združevanju dveh tabel.
Sintaksa je naslednja:
IZBERI stolpceIZ tabele 1
Tabela INNER JOIN2 VKLOP tabela1.ime_stolpca = tabela2.ime_stolpca;
LEVO PRIDRUŽI SE
V primeru LEFT JOIN vrne vse vrstice iz leve tabele in ujemajoče se vrstice iz desne tabele. Če ni ujemajočih se vrednosti iz desne tabele, združevanje na njihovo mesto doda vrednosti NULL.
Sintaksa je naslednja:
IZBERI stolpceIZ tabele 1
LEVO ZDRUŽITE tabelo2 VKLOP tabela1.ime_stolpca = tabela2.ime_stolpca;
PRAV PRIDRUŽI SE
Kot lahko ugibate, je RIGHT JOIN nasprotje LEVEGA JOIN-a. Ta vrsta združevanj vrne vse vrstice iz desne tabele in samo ujemajoče se vrstice iz leve tabele. Če v levi tabeli ni ustreznih vrstic, ji združevanje doda vrednosti NULL.
Sledi sintaksa RIGHT JOIN:
IZBERI stolpceIZ tabele 1
RIGHT JOIN tabela2 VKLOP tabela1.ime_stolpca = tabela2.ime_stolpca;
POLNI ZUNANJI SPOJ
Naslednji tip združevanja, ki ga boste srečali v bazah podatkov SQL, je FULL OUTER JOIN. Ta vrsta združevanja vrne vse vrstice, ko pride do ujemanja v desni ali levi tabeli. Če v nobenem od obeh ni ujemajoče se vrednosti, vrne NULL za stolpce iz tabele brez ujemanja.
Naslednje prikazuje sintakso FULL OUTER JOIN:
IZBERI stolpceIZ tabele 1
FULL OUTER JOIN tabela2 VKLOP tabela1.ime_stolpca = tabela2.ime_stolpca;
Dobro je upoštevati, da vsi motorji baze podatkov ne podpirajo FULL OUTER JOINS. Če želite to doseči, boste morda morali delati z drugimi vrstami JOINS ali podpoizvedbami.
Primeri:
Raziščimo nekaj primerov, kako lahko uporabimo te vrste združevanj za združevanje treh tabel v SQL.
Primer 1: Uporaba INNER JOIN
Začnemo z INNER JOIN. Recimo, da želimo pridobiti seznam filmov, inventar za izposojo in ustrezne podrobnosti o izposoji.
V povezanih tabelah lahko uporabimo več INNER JOINS, kot je prikazano v naslednjem primeru:
IZBERInaslov filma,
inventory.inventory_id,
najem.datum_najema
OD
film
INNER JOIN popis VKLOP
film.film_id = popis.film_id
INNER JOIN najem VKLOP
inventory.inventory_id = najem.inventory_id;
V danem primeru poizvedbe začnemo z združevanjem tabel filmov in inventarja na podlagi stolpca »film_id«. Nato vzamemo nastali niz in ga združimo s tabelo najema na podlagi stolpca »inventory_id«.
To zagotavlja, da združimo tri tabele z osnovnim INNER JOIN. Nastali niz je naslednji:
Primer 2: Uporaba INNER JOIN in LEFT JOIN
Recimo, da zdaj želimo seznam filmov, seznam zalog za izposojo (če obstaja) in povezane podrobnosti o izposoji.
Prav tako želimo zagotoviti, da tudi če film nima popisa za izposojo, ga še vedno vključimo v rezultat. Tu nastopita INNER JOIN in LEFT JOIN.
Razmislite o naslednjem primeru:
IZBERInaslov filma,
inventory.inventory_id,
najem.datum_najema
OD
film
INNER JOIN popis VKLOP
film.film_id = popis.film_id
LEFT JOIN najem VKLOP
inventory.inventory_id = najem.inventory_id;
V tem primeru uporabljamo INNER JOIN za združevanje tabele filmov in inventarja, da zagotovimo, da dobimo naslove z razpoložljivim inventarjem. Nato uporabimo LEFT JOIN, da se pridružimo tabeli za izposojo, da pridobimo podrobnosti o izposoji, če so na voljo, in NULL za vse naslove, ki nimajo zgodovine izposoje.
Nastali niz je naslednji:
Zaključek
V tej vadnici smo izvedeli o različnih vrstah JOINS v SQL, kako delujejo in kako jih lahko uporabimo za združevanje treh tabel.