Povezivanje tabela u SQL-u

Uobičajena situacija je da su podaci smešteni u više povezanih tabela. Tabele navodimo u obliku liste, odvojene zarezom.

SELECT [lista izraza] FROM [lista tabela] WHERE [uslov] ORDER BY [lista select polja]

Kada navedemo više tabela, potrebno je i da navedemo njihovu međusobnu vezu. Za razliku od nekih drugih (grafičkih) sistema gde je dovoljno jednom povezati tabele, u SQL upitima svaki put moramo navoditi vezu među poljima tabela.

Polja koja služe za povezivanje su obično parovi primarnih i stranih ključeva koji suštinski imaju iste vrednosti. Tako se povezivanje svodi na zadavanje uslova jednakosti za vezana polja.

SELECT [lista izraza] FROM tabela_A, tabela_B, tabela_C WHERE (polje_A = polje_B) AND (polje_B = polje_C)

Ako se slučajno desi da polja iz jedne i druge tabele imaju iste nazive, potrebno je da zadamo i naziv tabele uz naziv polja:

SELECT [lista izraza] FROM tabela_A, tabela_B, tabela_C WHERE (tabela_A.polje = tabela_B.polje) AND (tabela_B.polje = tabela_C.polje)

Primer

Uzmimo za primer tabelu sa knjigama. Kao pisac, nije zaista navedeno ime, već šifra pisca. Zašto? Jednostavno, za svakog pisca možemo imati više podataka, a bilo bi nepraktično da za svaku knjigu istog pisca navodimo sve te podatke.

sifra naslov stranice zanr pisac
0001 Isijavanje 390 HOR P02
0002 Boja magije 270 FAN P09
0005 Čekajući Godoa 90 DRA P11
0006 To 1070 HOR P02
0007 Veštice na putu 370 FAN P09
000A Mračna kula 200 FAN P02
000B Prokleta avlija 150 IST P01

Zbog toga smo podatke o piscima izdvojili u zasebnu tabelu. Veza između knjiga i pisaca je praktično šifra pisca, koja se pojavljuje u obe tabele. Tip veze je jedan prema više (jedan pisac može imati više knjiga), ali nam za kreiranje upita to sada nije bitno.

id ime rodjen umro zemlja
P01 Ivo Andrić 1892 1975 YU
P02 Stiven King 1947 0 US
P09 Teri Pračet 1948 2015 GB
P11 Semjuel Beket 1906 1989 IR

Sada ćemo napraviti SQL upit koji treba da nam ispiše nazive knjiga i imena pisaca. Najlakši način definisanja veze je preko WHERE klauzule.


  SELECT naslov, ime
  FROM knjige, pisci
  WHERE pisac=id
		
naslov ime
Isijavanje Stiven King
Boja magije Teri Pračet
Čekajući Godoa Semjuel Beket
To Stiven King
Veštice na putu Teri Pračet
Mračna kula Stiven King
Prokleta avlija Ivo Andrić

Naravno da možemo definisati i druge uslove za filtriranje podataka, kao i sortiranje.


  SELECT naslov, stranice, ime, zemlja
  FROM knjige
  WHERE (pisac=id) AND (zanr='FAN')
  ORDER BY stranice DESC
		
naslov stranice ime zemlja
Veštice na putu 370 Teri Pračet GB
Boja magije 270 Teri Pračet GB
Mračna kula 200 Stiven King US
Svi elementi sajta Web'n'Study, osim onih za koje je navedeno da su u javnom vlasništvu, vlasništvo su autora i ne smeju se koristiti, u celosti ili delimično bez pismenog odobrenja autora. To uključuje tekstove, slike, ilustracije, animacije, prateći grafički materijal i programski kod.
Ovaj sajt koristi tehnologiju kolačića (cookies). Detaljnije o tome možete pročitati u tekstu o našoj politici privatnosti.