od 21.01: Podupiti
Šta su podupiti?
Podupit (eng. subquery) je SQL upit koji se nalazi unutar drugog SQL upita. Drugim rečima, jedan upit je „ugnježden“ unutar drugog.
Rezultat podupita može da se koristi kao podatak koji je potreban glavnom (spoljašnjem) upitu.
Podupiti se najčešće koriste kada unapred ne znamo tačnu vrednost koju tražimo ili su nam potrebni podaci iz jedne tabele kako bismo filtrirali podatke iz druge tabele ili ako možda želimo da izbegnemo korišćenje više odvojenih upita.
Podupit se uvek piše unutar zagrada, a izvršava se pre glavnog upita.
Primeri (ako se koristi baza i tabele iz prethodne lekcije) -
Primer 1. Ispisati imena i prezimena zaposlenih kojima je nadređeni onaj Pera Kojot koji je iz USA:
Select Ime, Prezime
FROM Zaposleni
WHERE NadredjeniID = (SELECT ZaposleniID FROM Zaposleni
WHERE Ime='Pera' AND Prezime='Kojot' AND Drzava='USA');
Primer 2. Ispisati imena i prezimena zaposlenih koji žive u istoj državi kao i zapodleni koji ima ZaposleniID=1
Select Ime, Prezime, Drzava
FROM Zaposleni
WHERE Drzava = (SELECT Drzava FROM Zaposleni WHERE ZaposleniID = 1);
Primer 3. Ispisati imen i prezime zaposlenog koji ima najveći ZaposleniID
Select Ime, Prezime
FROM Zaposleni
WHERE ZaposleniID = (SELECT MAX(ZaposleniID) FROM Zaposleni );
Redosled izvršavanja:
-
- Najpre se izvršava podupit i on vraća određeni rezultat (jednu vrednost, više vrednosti ili celu tabelu).
- Zatim glavni upit koristi taj rezultat za dalje pretraživanje ili filtriranje podataka.
Vrste podupita
Podupiti koji vraćaju jednu vrednost
Ovi podupiti vraćaju samo jednu vrednost, na primer maksimalnu, minimalnu ili prosečnu vrednost nekog polja. Najčešće se koriste uz operatore kao što su =, <, > ili <=.
Na primer, ako želimo da pronađemo učenike koji imaju ocenu jednaku najvišoj oceni u odeljenju, prvo moramo saznati koja je to najviša ocena. Taj zadatak obavlja podupit, dok glavni upit pronalazi učenike sa tom ocenom.
Podupiti koji vraćaju više vrednosti
Neki podupiti vraćaju više redova, odnosno skup vrednosti. Takvi podupiti se najčešće koriste sa operatorima IN, ANY ili ALL.
Primer ovakve situacije je kada želimo da pronađemo sve proizvode koji pripadaju određenoj kategoriji, dok se identifikatori tih kategorija nalaze u drugoj tabeli. Podupit vraća listu identifikatora, a glavni upit proverava da li se određeni zapis nalazi u toj listi.
Podupiti koji vraćaju tabelu
Postoje i podupiti koji vraćaju čitavu tabelu podataka. Oni se najčešće koriste u naprednijim SQL upitima, na primer unutar FROM dela naredbe. Takvi podupiti se ponašaju kao privremene tabele koje postoje samo tokom izvršavanja upita.
(Ovo se ređe obrađuje u nastavi ako je u pitanju srednja škola.)
Gde se mogu koristiti podupiti?
Podupiti se mogu koristiti na različitim mestima u SQL upitu:
-
u delu
WHEREza filtriranje podataka, -
u delu
SELECTza izračunavanje vrednosti, -
u delu
FROMkao privremena tabela.
Za početak ćemo da koristimo podupite u okviru WHERE dela, jer su tada najlakši za razumevanje.