Što se tiče spojeva, većina nas uglavnom radi s ograničenjem od dvije tablice i slično. Međutim, uobičajeno je da je potrebno spojiti tri tablice kako bi se dobio smisleniji raspored podataka i uvid. Uzmimo za primjer gdje želite dohvatiti popis filmova, njihov odgovarajući inventar za posudbu i stvarne pojedinosti o posudbi. Svaka od ovih jedinica, kao što su filmovi, inventar i pojedinosti o najmu, nalaze se u zasebnim tablicama.
U ovom vodiču provest ćemo vas kroz različite spojeve i tehnike koje možete koristiti za spajanje triju tablica u SQL-u.
Zahtjevi:
U svrhu demonstracije koristit ćemo MySQL verziju 80 i Sakila oglednu bazu podataka. Da biste slijedili, možete preuzeti i postaviti Sakila bazu podataka na svom MySQL poslužitelju. Slobodno upotrijebite bilo koji drugi skup podataka koji smatrate primjenjivim.
Vrste spajanja u SQL-u
Prije nego što dođemo do primjene spojeva, počnimo s raspravom o različitim vrstama spojeva koji su dostupni u SQL bazama podataka.
UNUTARNJI SPOJ
Prva vrsta spajanja je INNER JOIN. Ova vrsta spajanja vraća samo retke koji sadrže podudarnu vrijednost u objema tablicama. To je vrlo čest tip spajanja i najjednostavniji je pri spajanju dviju tablica.
Sintaksa je sljedeća:
SELECT stupceIZ tablice1
UNUTARNJI SPOJ tablica2 NA tablica1.naziv_stupca = tablica2.naziv_stupca;
LIJEVO PRIDRUŽI
U slučaju LEFT JOIN-a, vraća sve retke iz lijeve tablice i podudarne retke iz desne tablice. Ako nema odgovarajućih vrijednosti iz desne tablice, spajanje dodaje NULL vrijednosti na njihovo mjesto.
Sintaksa je sljedeća:
SELECT stupceIZ tablice1
LEFT JOIN table2 NA tablica1.naziv_stupca = tablica2.naziv_stupca;
PRAVO SE PRIDRUŽI
Kao što možete pretpostaviti, DESNI JOIN je suprotan LIJEVOM JOIN-u. Ova vrsta spajanja vraća sve retke iz desne tablice i samo odgovarajuće retke iz lijeve tablice. Ako u lijevoj tablici nema odgovarajućih redaka, spajanje joj dodaje NULL vrijednosti.
Sljedeća je sintaksa RIGHT JOIN-a:
SELECT stupceIZ tablice1
RIGHT JOIN table2 NA tablica1.naziv_stupca = tablica2.naziv_stupca;
POTPUNI VANJSKI SPOJ
Sljedeći tip spajanja s kojim ćete se susresti u SQL bazama podataka je FULL OUTER JOIN. Ova vrsta spajanja vraća sve retke kada postoji podudaranje u desnoj ili lijevoj tablici. Ako nema podudarne vrijednosti ni u jednom od dva, vraća NULL za stupce iz tablice bez podudaranja.
Sljedeće demonstrira sintaksu FULL OUTER JOIN-a:
SELECT stupceIZ tablice1
FULL OUTER JOIN table2 NA tablica1.naziv_stupca = tablica2.naziv_stupca;
Dobro je imati na umu da svi pogoni baze podataka ne podržavaju FULL OUTER JOINS. Da biste to postigli, možda ćete morati raditi s drugim vrstama JOINS ili podupita.
Primjeri:
Istražimo neke primjere kako možemo koristiti ove vrste spajanja za spajanje triju tablica u SQL-u.
Primjer 1: Korištenje INNER JOIN
Počinjemo s INNER JOIN-om. Pretpostavimo da želimo dohvatiti popis filmova, inventar iznajmljivanja i odgovarajuće pojedinosti o iznajmljivanju.
Možemo koristiti više INNER JOIN-ova na povezanim tablicama kao što je prikazano u sljedećem primjeru:
IZABERInaslov filma,
inventory.inventory_id,
iznajmljivanje.datum_iznajmljivanja
IZ
film
INNER JOIN inventar NA
film.film_id = inventar.film_id
INNER JOIN najam NA
inventory.inventory_id = najam.inventory_id;
U danom primjeru upita počinjemo spajanjem tablica filma i inventara na temelju stupca 'film_id'. Zatim uzimamo dobiveni skup i pridružujemo ga tablici za iznajmljivanje na temelju stupca 'inventory_id'.
Ovo osigurava spajanje triju tablica osnovnim INNER JOIN-om. Rezultirajući skup je sljedeći:
Primjer 2: Korištenje INNER JOIN i LEFT JOIN
Recimo da sada želimo popis filmova, popis inventara za iznajmljivanje (ako postoji) i pridružene pojedinosti o najmu.
Također želimo biti sigurni da čak i ako film nema inventar za posudbu, i dalje ga uključujemo u rezultat. Ovo je mjesto gdje INNER JOIN i LEFT JOIN stupaju na scenu.
Razmotrite sljedeći primjer:
IZABERInaslov filma,
inventory.inventory_id,
iznajmljivanje.datum_iznajmljivanja
IZ
film
INNER JOIN inventar NA
film.film_id = inventar.film_id
LEFT JOIN iznajmljivanje NA
inventory.inventory_id = najam.inventory_id;
U ovom primjeru koristimo INNER JOIN za spajanje tablice filmova i inventara kako bismo osigurali dobivanje naslova s dostupnim inventarom. Zatim koristimo LEFT JOIN za pridruživanje tablici za iznajmljivanje kako bismo dohvatili pojedinosti o najmu ako su dostupni i NULL za bilo koji naslov koji nema povijest posudbe.
Rezultirajući skup je sljedeći:
Zaključak
U ovom vodiču naučili smo o raznim vrstama JOINS u SQL-u, kako rade i kako ih možemo koristiti za kombiniranje triju tablica.