SQL – Ugnježdeni upiti

Prethodni put govorili smo o spajanju dve ili više tabela. Ovaj put ćemo, takođe, govoriti o spajanju, ali na drugačiji način. Reč je zapravo o tome da jedan upit u sebi može da sadrži jedan ili više upita. Na ovaj način možemo da izvršimo spajanje više upita. Pri tome rezultat ugnježdenog upita biva argument onog osnovnog, spoljašnjeg upita. Da bi nam sva prethodna priča bila jasnija koristićemo primere koji će se zasnivati na dve tabele (iste kao u prethodnom SQL prilogu): „Radnik“ sa poljima (SIF_R, IME, PREZ, SIF_S, PLATA) i „Sektor“ sa poljima (SIF_S, NAZ_S). Tabele i pripadajuće slogove možete videti na slici.

U prvom primeru videćemo kako jedna cela SELECT naredba može biti ugneždena u drugu SELECT naredbu. Za primer, zadatak će biti da upitom dobijemo šifre i imena svih radnika koji rade u sektoru „Prodaja“:


SELECT SIF_R, IME
FROM Radnik
WHERE SIF_S = (SELECT SIF_S
FROM Sektor
WHERE NAZS=’Prodaja’);

Rezultat možete videti na slici. Kao što vidite podupit se obavezno stavlja u zagrade, čime nalažemo da se on izvršava pre spoljašnjeg upita. Analizirajući ovaj upit, možemo videti da izdvajamo slogove (podatke o radnicima) koji rade u sektoru kome je šifra (SIF_S) jednaka rezultatu ugneždenog upita. Podupit je jednostavan i daje jedan slog – šifru sektora čiji je naziv „Prodaja“. Na ovaj način smo do tražene šifre sektora došli preko naziva sektora i izlistali sve radnike koji u njemu rade. Kada kreiramo ovakav podupit moramo voditi računa o tome da on mora da vrati samo jednu vrednost. Inače, podupit može da vrati i više vrednosti kada se kao operator poređenja koriste ključne reči „IN“, „ANY“ i „ALL“, umesto operatora jednako (=).

Kao primer upotrebe podupita sa ovim drugim ključnim rečima, postavićemo upit: Prikazati imena, prezimena i plate svih radnika, koji zarađuju više od bilo koga u sektoru „Prodaja“. SQL upit će glasiti:


SELECT IME, PREZ, PLATA
FROM Radnik
WHERE PLATA > ANY (SELECT PLATA
FROM Radnik
WHERE SIF_S= (SELECT SIF_S
FROM Sektor
WHERE NAZ_S=’Prodaja’);

Kao što vidite ključnu reč „ANY“ smo upotrebili da pronađemo radnike čija je plata veća od bilo koje („any“) plate radnika odeljenja „Prodaja“. A da bi broj radnika suzili na samo one koji pripadaju datom sektoru iskoristili smo dvostruko ugnježdavanje.

Pratite Krstaricu na www.krstarica.com