Home > SQL-tecaj > SQL Lekcija 10 – JOINS

SQL Lekcija 10 – JOINS

Prosinac 26th, 2008

JOINS

JOIN komande spadaju sa klausulama u tzv. advanced komande, u prevodu ‘zafrkane’ J komande. Prema tome, na posao. One obavljaju jednu veoma vaznu radnju, spajaju tabele.


U praksi to izgleda ovako:

Uputa:

  • u tabeli Auto1 je Marka primarni kod (primary key), sto znaci da ne mogu postojati dva reda sa istom vrijednoscu. Primarni kod razlikuje izmedju dvije osobe, iako one imaju sve druge iste podatke
  • Kolumna Marka u Auto2 tabeli, sluzi samo da pokazuje na osobe/automobile iz Auto1 tabele bez koristenja imena i sl.

Ovo je nasa prva tabela:

Table: Auto1

Proizvodjac Model Boja Marka Vlasnik
VW Golf GTI 2000 Plava 22645 Ime1 Prezime1
Mercedes 190 C Siva 15488 Ime1 Prezime1
Ford Sierra 2.0 Crvane Ime2 Prezime2

A ovo nasa druga tabela:
Table: Auto2

Proizvodjac Marka
VW 22645
GM 17956
Zastava 4874

Za pocetak cemo Vam pokazati kako izgleda jedan primitvni, ali veoma efektivan i brz nacin spajanja tabela, odnosno spajanja podataka dviju tabela:

SELECT Vlasnik
FROM Auto1
WHERE Proizvodjac IN (SELECT Proizvodjac FROM Auto2)

;

I rezultat je:

Vlasnik
Ime1 Prezime1

jer se samo VW nalazi u obje tabele.

Drugi nacin da dobije isti rezultat izgleda ovako:

SELECT Auto1.Vlasnik
FROM Auto1, Auto2

WHERE Auto1.Proizvodjac = Auto2.Proizvodjac

;

U ovom slucaju smo koristili kraci put, tako smo odmah uporedjivali podatke iz dvije tabele, bez selektovanja podataka.

Princip: ImeTabele.ImeKolumne

Na ovaj nacin mozete veoma efikasno definisati varijable tj. kolumne.

Treci nacin da spojimo tabele je pomocu komande JOIN. To je najbolji i najefikasniji nacin. Postoje 3
varijante ove komande: INNER JOIN, LEFT JOIN, RIGHT JOIN.

INNER JOIN

INNER JOIN pokazuje samo podatke ako ih tamo i stvarno ima. Ako ih nema, ti redovi nece biti pokazani.
Koristimo gornje tablice Auto1 i Auto2.

Naredba izgleda ovako:

SELECT Auto1.Vlasnik, Auto2.Marka
FROM Auto1

INNER JOIN Auto2
ON Auto1.Proizvodjac = Auto2.Proizvodjac
;

LEFT JOIN

LEFT JOIN pokazuje sve podatke iz druge tabele, bez obzira da li se slazu sa rezultatima iz prve tabele i svi ce redovi biti prikazani.

SELECT Auto1.Vlasnik, Auto2.Marka
FROM Auto1
LEFT JOIN Auto2
ON Auto1.Proizvodjac = Auto2.Proizvodjac
;

RIGHT JOIN

RIGHT JOIN pokazuje sve podatke iz druge tabele, bez obzira da li se slazu sa rezultatima iz prve tabele i svi ce redovi biti prikazani. Ako ima nekih podataka iz druge tabele da se ne slazu sa podacima iz prve, i ti redovi ce biti prikazani.

SELECT Auto1.Vlasnik, Auto2.Marka
FROM Auto1
RIGHT JOIN Auto2
ON Auto1.Proizvodjac = Auto2.Proizvodjac

;

U sledecoj lekciji cemo Vam predstaviti nekoliko SQL funkcija koje su takodje veoma vazne, i spadaju u isti
grupu komandi tj. funkcija kao COUNT, ali statistici gledano se manje koristi, pa se nalaze samo iz tog
razloga tek u 12. lekciji.

Popularity: 17% [?]

SQL-tecaj , , , ,

  1. pocetnik
    Listopad 14th, 2010 at 09:18 | #1

    nije mi bas naj jasnije ovo join desni i ljevi meni ovo isto zvuci kada procitam :) koja je razlika :( vjerovatno ja nisam skontao

  2. Listopad 14th, 2010 at 09:26 | #2

    poz.

    dakle lijevi i desni join su tu da ukljuce ove druge tablice kompletno za razliku od inner join koji uveze samo podatke koji su u obe tablice.
    tako da ovaj primjer:
    SELECT Auto1.Vlasnik, Auto2.Marka
    FROM Auto1
    LEFT JOIN Auto2
    ON Auto1.Proizvodjac = Auto2.Proizvodjac

    znaci podaci iz auto1 koji se slazu sa podacima iz auto2 plus svi podaci iz druge tablice dakle iz auto2 tablice.

    poz.

  3. peca
    Prosinac 1st, 2010 at 00:03 | #3

    zar nije svi podaci auro1 koji se slazu sa podacima auto2 plus si podaci iz prve tablice

  4. Prosinac 1st, 2010 at 10:52 | #4

    Pozdrav Peca,

    tacno. Potkrala mi se greska. Dakle dobijemo sva auta, dakle i ona koja npr nemaju proizvodjaca.

    hvala za opasku.
    BHWebmasters.Net tim

  1. No trackbacks yet.