Podupit je izraz SELECT ugnežđen unutar odredbi SELECT, SELECT... U, UMETNI... Izraz INTO, DELETE ili UPDATE ili unutar drugog podupita.
Sintaksa
Možete da koristite tri oblika sintakse da biste kreirali podupit:
poređenje [ANY | SVE | SOME] (sqlstatement)
expression [NOT] IN (sqlstatement)
[NE] EXISTS (sqlstatement)
Podupit ima sledeće delove:
Deo |
Opis |
Poređenja |
An izraz i operator poređenja koji poredi izraz sa rezultatima podupita. |
izraz |
Izraz za koji se pretražuje skup rezultata podupita. |
sqlstatement |
Izraz SELECT koji prati isti format i pravila kao bilo koji drugi select izraz. Mora da bude u zagradama. |
Napomene
Podupit možete da koristite umesto izraza na listi polja izraza SELECT ili u odredbi WHERE ili HAVING. U podupitu koristite izraz SELECT da biste obezbedili skup nekih određenih vrednosti za procenu u izrazu odredbe WHERE ili HAVING.
Koristite predikat ANY ili SOME, koji su sinonimi, da biste preuzeli zapise u glavnom upitu koji zadovoljavaju poređenje sa zapisima preuzetim u podupitu. Sledeći primer daje sve proizvode čija je jedinična cena veća od cene bilo kog proizvoda prodatog uz popust od 25 procenata ili više:
SELECT * FROM Products WHERE UnitPrice > ANY (SELECT UnitPrice FROM OrderDetails WHERE Discount >= .25);
Koristite predikat ALL da biste preuzeli samo one zapise u glavnom upitu koji zadovoljavaju poređenje sa svim zapisima preuzetim u podupitu. Ako ste u prethodnom primeru promenili ANY na ALL, upit će vratiti samo one proizvode čija je jedinična cena veća od cene svih proizvoda prodatih uz popust od 25 procenata ili više. Ovo je mnogo restriktivnije.
Koristite predikat IN da biste preuzeli samo one zapise u glavnom upitu za koje neki zapisi u podupitu sadrže jednaku vrednost. Sledeći primer daje sve proizvode sa popustom od 25 procenata ili više:
SELECT * FROM Products WHERE ProductID IN (SELECT ProductID FROM OrderDetails WHERE Discount >= .25);
Nasuprot toga, funkciju NOT IN možete da koristite da biste preuzeli samo one zapise u glavnom upitu za koje nijedan zapis u podupitu ne sadrži jednaku vrednost.
Koristite predikat EXISTS (sa opcionalnom NOT rezervisanom rečju) u tačno/netačnim poređenjima da biste utvrdili da li podupit vraća neke zapise.
Pseudonime imena tabele možete da koristite i u podupitu da biste uputili na tabele navedene u odredbi FROM izvan podupita. Sledeći primer daje imena zaposlenih čije su plate jednake ili veće od prosečne plate svih zaposlenih koji imaju isto radno mesto. Tabeli "Zaposleni" je dat pseudonim "T1":
SELECT LastName, FirstName, Title, Salary FROM Employees AS T1 WHERE Salary >= (SELECT Avg(Salary) FROM Employees WHERE T1.Title = Employees.Title) Order by Title;
U prethodnom primeru, polje AS rezervisana reč opcionalno.
Neki podupiti su dozvoljeni u unakrsnim upitima – tačnije, kao predikati (oni u odredbi WHERE). Podupiti kao izlaz (oni na listi SELECT) nisu dozvoljeni u unakrsnim upitima.