Združite tri tabele v SQL

Zdruzite Tri Tabele V Sql



V relacijskih zbirkah podatkov je naloga pridobivanja podatkov iz več tabel izjemno pogosta. Odvisno od ciljnega rezultata to vključuje združevanje več tabel v eno enoto in pridobivanje nastalih podatkov.

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 stolpce

IZ 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 stolpce

IZ 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 stolpce

IZ 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 stolpce

IZ 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:

IZBERI

naslov 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:

IZBERI

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