Naredba JOIN

SQL naredba JOIN kombinira zapise iz dvije tablice pomocu vrijednosti atributa koje su im zajednicke. Rezultat tog kombiniranja je nova, privremena tablica, tzv. joined table. Osnovni tipovi JOIN naredbe su INNER JOIN i OUTER JOIN (OUTER JOIN se djeli na LEFT OUTER JOIN, krace LEFT JOIN i RIGHT OUTER JOIN, krace RIGHT JOIN).

Zajednicke vrijednosti atributa pomocu kojih kombiniramo tablice su kljuc jedne tablice koji je strani kljuc u drugoj tablici koju kombiniramo.

Svaki upit koji ostvarimo JOIN naredbom, moze se dobiti i nekom od ranije obradjivanih metoda kombiniranja dvije tablice.

Djelovanje JOIN naredbe ilustrirat cemo primjerima koji koriste slijedece dvije tablice:

Zaposlenici:

ID_zaposlenika

Ime

0111

Jura Juric

0112

Pero Peric

0113

Stef Stefic

0114

Pajo Patak

Narudjbe:

ID_proizvoda

Proizvod

ID_zaposlenika

234

Printer

0111

657

Stol

0113

865

Stolica

0113

 

Tablice se odnose na zaposlenike neke firme koji narucuju uredski materijal. U tablici "Zaposlenici" imamo kljuc "ID_zaposlenika" koji je ujedno i strani kljuc u tablici "Narudjbe".

 

INNER JOIN:
Sintaksa:

SELECT atribut1, atribut2, atribut3 (koliko vec atributa iz prve ili druge tablice  zelimo) 
FROM prva_tablica INNER JOIN druga_tablica
ON kljuc_prve_tablice = strani_kljuc_druge_tablice;
 

Primjer: Koji zaposlenici su narucili uredski materijal i sto su narucili?

SELECT Ime,Proizvod
FROM Zaposlenici INNER JOIN Narudjbe
ON Zaposlenici.ID_zaposlenika=Narudjbe.ID_zaposlenika;
 

Rezultat upita:

Ime

Proizvod

Jura Juric

Printer

Stef Stefic

Stol

Stef Stefic

Stolica

INNER JOIN ispisuje sve retke obje tablice u kojima smo pronasli "match" (tj koje smo uspjeli povezati istom vrijednosti atributa). Ostale retke ne ispisuje.

 

LEFT JOIN:
Sintaksa:

SELECT atribut1, atribut2, atribut3 (koliko vec atributa iz prve ili druge tablice  zelimo) 
FROM prva_tablica LEFT JOIN druga_tablica
ON kljuc_prve_tablice = strani_kljuc_druge_tablice;
 

Primjer: Ispisite sve zaposlenike, i ako su nesto narucili, onda i njihove narudjbe.

SELECT Ime,Proizvod
FROM Zaposlenici LEFT JOIN Narudjba
ON Zaposlenici.ID_zaposlenika=Narudjbe.ID_zaposlenika;
 

Rezultat upita:

Ime

Proizvod

Jura Juric

Printer

Pero Peric

 

Stef Stefic

Stol

Stef Stefic

Stolica

Pajo Patak

 

LEFT JOIN ispisuje sve retke kao i INNER JOIN te jos dodatne retke (sve preostale retke) iz prve tablice, koji nemaju "matcheve" s drugom tablicom.

 

RIGHT JOIN:
Sintaksa:

SELECT atribut1, atribut2, atribut3 (koliko vec atributa iz prve ili druge tablice  zelimo) 
FROM prva_tablica RIGHT JOIN druga_tablica
ON kljuc_prve_tablice = strani_kljuc_druge_tablice;
 

Primjer: Ispisite popis svih narudjbi i tko ih je narucio (ako narucioc postoji).

SELECT Ime,Proizvod
FROM Zaposlenik RIGHT JOIN Narudjba
ON Zaposlenici.ID_zaposlenika=Narudjbe.ID_zaposlenika;
 

Rezultat upita:

Ime

Proizvod

Jura Juric

Printer

Stef Stefic

Stol

Stef Stefic

Stolica

RIGHT JOIN ispisuje sve retke kao i INNER JOIN te jos dodatne retke (sve preostale retke) iz druge tablice, koji nemaju "matcheve" s prvom tablicom. Dakle, da je postojao neki proizvod kojeg nitko nije narucio, i on bi bio ispisan.