Kvalifikovani nazivi kolona i alijasi tabela
Često može da se desi da treba da se koristi više različitih tabela u jednom upitu. Pošto u ovom predmetu radimo samo sa relacionim bazama podataka, to znači da su tabele koje se koriste u upitima najčešće i međusobno povezane na neki način.
Prilikom kreiranja tabela, nazivi kolona u njima zavise od sadržaja tabele, i često se dešava da se u različitim tabelama pojavljuju isti nazivi kolona.
Kada iz više tabela biramo kolone koje imaju ista imena (na primer id, naziv, ime), baza ne zna automatski iz koje tabele želimo da uzmemo podatak.
Da bismo to rešili, koristimo kvalifikovane nazive kolona.
1. Šta su kvalifikovani nazivi kolona
Kvalifikovani naziv kolone je naziv kolone kojem je ispred dodato ime tabele (ili njen alias), razdvojeno tačkom.
Opšti oblik:
ime_tabele.naziv_kolone
Ovim se jasno određuje iz koje tabele i iz koje kolone u njoj nam trebaju podaci.
2. Zašto koristimo kvalifikovane nazive kolona
Najčešći razlog za korišćenje kvalifikovanih naziva kolona je kada u upitu učestvuje više tabela koje imaju iste nazive kolona,
Međutim, čak i kada to nije slučaj, često ih koristimo i da bismo izbegli nejasnoće i greške u izvršavanju SQL upita, kao i radi veće čitljivosti - na primer da bi skratili kucanje - umesto OpisProizvoda.info da npr pišemo o.Info ...
3. Primer
Imamo dve tabele:
Tabela Vlasnik
| vlasnikID | ime | prezime | |
|---|---|---|---|
| 1 | Ana | Petrović | |
| 2 | Marko | Jovanović |
Tabela Pas
| pasID | ime | vlasnikID |
|---|---|---|
| 1 | Sima | 2 |
| 2 | Cezar | 1 |
4. Upit bez kvalifikovanih naziva
Ako pokušamo sledeći upit:
SELECT pasID, ime, ime
FROM Pas, Vlasnik;
Baza će prijaviti grešku ili vratiti pogrešan rezultat, jer ne zna iz koje tabele treba da uzme kolonu ime (pojavljuje se u obe tabele).
5. Upit sa kvalifikovanim nazivima
Ispravna verzija upita je:
SELECT Vlasnik.ime, Vlasnik.prezime, Pas.Ime
FROM Vlasnik, Pas
WHERE Vlasnik.vlasnikID = pas.vlasnikID;
Ovde smo jasno naveli iz koje tabele dolazi svaka kolona.
Na primer:
-
Ucenik.ime→ kolona ime iz tabele Ucenik -
Odeljenje.naziv→ kolona naziv iz tabele Odeljenje
6. Korišćenje aliasa (nadimaka) tabela
Da bismo olakšali pisanje, često dodeljujemo alias (nadimak) tabelama.
SELECT V.ime, V.prezime, P.Ime
FROM Vlasnik V, Pas P
WHERE V.vlasnikID = P.vlasnikID;
ili
SELECT V.ime, V.prezime, P.Ime
FROM Vlasnik AS V, Pas AS P
WHERE V.vlasnikID = P.vlasnikID;
U većini sistema za upravljanje podataka može a ne mora da se koristi AS prilikom kreiranja aliasa tabela!
Alias čini upit kraćim i preglednijim, a dalje kvalifikovanje kolona ostaje isto:
-
v.ime→ iz tabeleVlasnik -
p.ime→ iz tabele Pas
7. Prednosti korišćenja kvalifikovanih naziva
- Sprečavaju greške u upitima
- Povećavaju čitljivost koda
- Omogućavaju tačno određivanje kolone kod spajanja tabela
- Posebno su korisni u složenijim upitima sa više tabela
8. Vežbe
Za potrebe vežbi koristićemo bazu IzlozbaPasa :
Ako je nemate, tada desni klik i sačuvajte fajl za kreitanje i popunjavanje baze KreirajBazuIzlozbaPasa.sql
Otvorite ovaj sql fajl i izvršite upit (Sql Server Management Studio)
Ispisati imena pasa korišćenjem kvalifikovanih naziva kolona i alijasa tabela
select P.Ime from Pas P;
Ispisati nazive rasa korišćenjem kvalifikovanih naziva kolona i alijasa tabela
select Rasa.NazivRase from Rasa;
Za svakog psa ispisati ime i naziv rase - ovde nam treba ime iz tabele Pas i NazivRasa iz tabele Rasa
select Pas.Ime, Rasa.NazivRase from Pas, Rasa;
Dodatno objašnjenje rezultata ovog primera (i zašto imamo mnogo više redova u rezutatu nego što smo očekivali):
Kada se navedu samo tabele iz kojih nam trebaju podaci, razdvojene zarezom i bez ikakvih dodatnih uslova tada je u pitanju DEKARTOV PROIZVOD tabela - kobbinacija svake kolone prve tabele i svake kolone drige tabele, pa broj rezultujućih redova bude na kraju broj redova prve tabele pomnožen sa brojem redova druge tabele. Češće se koristi originalni naziv na engleskon jeziku : CROSS JOIN.
Pošto su ove dve tabele povezane - u obe ima kolona RasaID: u tabeli Rasa to jedinstveno određuje samo jedu rasu iz tabele, u tabeli Pas to određuje koja je njegova rasa, tj rasaID za koju su ostali podaci u tabeli Rasa. Taj uslov treba dodati ili korišćenjem klauzule WHERE ili koriščenjem JOIN-a.
select Pas.Ime, Rasa.NazivRase from Pas, Rasa where Pas.RasaID = Rasa.RasaID;
Malo teži primer u kojem se koriste tri tabele:
Za svakog psa ispisati njegovo ime, naziv rase i dužinu dlake:
select Pas.Ime, Duzina_Dlake.Duzina, Rasa.NazivRase from Pas, Duzina_Dlake, Rasa where (Pas.DDID = Duzina_Dlake.DDID) and (Pas.RasaID = Rasa.RasaID);
9. Zaključak
Dobra je praksa ako se koriste kvalifikovani nazivi kolona u radu sa više tabela jer omogućavaju da tačno znamo iz koje tabele dolazi svaki podatak.
Njihovo korišćenje nam pomaže da pišemo jasne, čitljive i tačne upite.