Kliknite tukaj, da si ogledate profil, kot ga vidijo drugi

Uporaba Inner, Left in Right Join v SQL

Delite vsebino na Facebooku
Delite vsebino na Twitterju
  Select stavki z Inner, Left in Right Join predstavljajo pomemben del SQL sintakse in nam v določenih primerih pridejo zelo prav.
 
 
1
 
 

Tokrat bomo še nekoliko razširili prejšnjo lekcijo z uporabo stavkov Inner, Left in Right Join.



Za namene lekcije bomo zopet uporabili tabeli uporabniki in sifrant_drzava.

Za pregled strukture tabel si oglejte prejšnje SQL lekcije.

 
 
2
 
 

V prejšnji lekciji smo se naučili, da lahko podatke iz več tabel dobimo s stavkom, kjer izenačimo polja iz dveh tabel.

SELECT * FROM

uporabniki AS a, sifrant_drzava AS b
WHERE a.id_drzava = b.id_drzava

Namesto tega lahko uporabimo SQL stavek INNER JOIN, ki na isti način pridobi podatke iz obeh tabel, tako da je rezultat na koncu isti.

SELECT *
FROM uporabniki AS a
INNER JOIN sifrant_drzava AS b
ON a.id_drzava = b.id_drzava

 
 
3
 
 

Seveda lahko tudi INNER JOIN stavku na koncu nastavimo dodatne pogoje s stavkom WHERE.

SELECT * FROM
uporabniki AS a
INNER JOIN sifrant_drzava AS b
ON a.id_drzava = b.id_drzava
WHERE b.ime_drzave = 'Slovenija'

 
 
4
 
 

Bolj zanimiva pa je uporaba stavka LEFT JOIN.

V zgornjem primeru je zahtevano, da je podatek id_drzava isti v obeh tabelah, saj tako zahtevamo s pogojem a.id_drzava = b.id_drzava

Včasih pa se znajdemo v situaciji, ko se podatek nahaja v prvi tabeli, ni pa nujno, da je tudi v drugi tabeli. V ta namen uporabimo stavek LEFT JOIN.

SELECT *
FROM uporabniki AS a
LEFT JOIN sifrant_drzava AS b ON a.id_drzava = b.id_drzava

Gornji SQL stavek nam tako vrne vse podatke iz prve tabele s pripadajočimi enakimi vrednostmi iz druge tabele. V kolikor pa podatka v drugi tabeli ni, v poljih iz druge tabele dobimo prazno vrednost NULL.

 
 
5
 
 

Podobno velja tudi za stavek RIGHT JOIN, s tem da ta stavek vedno vrne vse podatke iz druge tabele, med ko ni nujno, da se podatek nahaja v prvi tabeli.

SELECT * FROM uporabniki AS a
RIGHT JOIN sifrant_drzava AS b ON a.id_drzava = b.id_drzava

Gornji stavek nam sedaj vrne vse osebe iz s pripadajočimi državami. Vidimo pa tudi izpisano državo Italija, ki se nahaja samo v drugi tabeli, medtem ko v prvi tabeli ni nobenega uporabnika, ki bi bil iz te države.

 
 
Komentiraj
 
 
 
 
 
5.10.2016, 18:46
Ali obstaja tudi stavek, ki zahteva, da je en podatek enak, vendar ni nujno da je v obeh tabelah.

primer:
LEFT JOIN:
Oseba|Mesto |id_drzava|id_drzava|ime_drzave
-----------------------------------
Janko|Kranj |3 |3 |Slovenija
Metka|Maribor |4 |4 |Avstrija
Mihec|Ljubljana|3 |3 |Slovenija
Janez|Ptuj |111 |NULL |NULL

RIGHT JOIN:
Oseba|Mesto |id_drzava|id_drzava|ime_drzave
-----------------------------------
Janko|Kranj |3 |3 |Slovenija
Metka|Maribor |4 |4 |Avstrija
Mihec|Ljubljana|3 |3 |Slovenija
NULL |NULL |NULL |6 |Italija


? JOIN (ta stavek):
Oseba|Mesto |id_drzava|id_drzava|ime_drzave
-----------------------------------
Janko|Kranj |3 |3 |Slovenija
Metka|Maribor |4 |4 |Avstrija
Mihec|Ljubljana|3 |3 |Slovenija
NULL |Ptuj |111 |Null |NULL
 
 
 
 
6.10.2016, 0:31
Vprašanje oz. zadnji rezultat mi glede na primer ni preveč smiseln, ker je razultat isti kot LEFT join, samo da ima ime NULL, tako da ne vem, kateri podatek naj bi bil enak.

Raje podaj, katere tabele in podatke imaš ter kaj bi rad dobil.

Drugače pa se z SQL da pridobiti praktično kakršnekoli želene podatke.
 
 
 
 
31.12.2016, 18:00
Imam tabeli pages in posts. Podatke bi rad dobil tako, da bi v isti poizvedbi dobil podatke iz obeh tabel.

posts:
postTITLE | postURL
-------------------------
postTitle1 | postUrl1
postTitle2 | postUrl2
postTitle3 | postUrl3

pags:
pageTITLE | pageURL
-------------------------
pageTitle1 | pageUrl1
pageTitle2 | pageUrl2
pageTitle3 | pageUrl3

poizvedba:
postTITLE | postURL | pageTITLE | pageURL
------------------------------------------------
postTitle1 | postUrl1 | NULL | NULL
postTitle2 | postUrl2 | NULL | NULL
postTitle3 | postUrl3 | NULL | NULL
NULL | NULL | pageTitle1 | pageUrl1
NULL | NULL | pageTitle2 | pageUrl2
NULL | NULL | pageTitle3 | pageUrl3

Če še kaj ni jasno bom poskusil bolj natančno razližiti :-)
 
Prijava in registracija
 
 
 
Zmaga.com ponuja brezplačno in razumljivo učenje računalniških programov, vas na enkraten način spozna z različnimi svetovnimi jeziki, s podrobno obrazloženimi recepti prikaže čare kulinarike in vam prežene strahove pred domačimi opravili.
 
 
Poleg tega lahko prebirate poučne članke, ki so namenjene širjenju naše splošne razgledanosti ter preverite svoje znanje z priljubljenim in enostavnim sistemom za preverjanje znanja. Če med vsebinami, ki se dodajajo vsak dan, ne najdete želenega znanja, je za vaša vprašanja na voljo dobro obiskan forum, kjer lahko tudi aktivno sodelujete. V primeru, da bi radi svoje praktično znanje delili z ostalimi, pa to lahko storite preko preprostega vmesnika za dodajanje vsebin. Zmagajte z znanjem z Zmaga.com!