SQL podupiti

Primjenjuje se na
Access za Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Podupit je naredba SELECT ugniježđena unutar naredbe SELECT, SELECT... U, UMETNI... INTO, DELETE ili UPDATE ili unutar nekog drugog podupita.

Sintaksa

Da biste stvorili podupit, možete koristiti tri oblika sintakse:

usporedba [ANY | SVE | SOME] (sqlnaredba)

izraz [NOT] IN (sqlnaredba)

[NIJE] EXISTS (sqlnaredba)

Podupit se sastoji od sljedećih dijelova:

Dio Opis
Usporedba Izraz i operator usporedbe koji uspoređuju izraz s rezultatima podupita.
izraz Izraz za koji se traži skup rezultata podupita.
sqlnaredba Naredba SELECT koja slijedi isti oblik i pravila kao i sve druge naredbe SELECT. Mora se nalaziti u zagradama.

      

Napomene

Umjesto izraza na popisu polja u naredbi SELECT ili u uvjetu WHERE ili HAVING možete koristiti podupit. U podupitu naredbu SELECT koristite da biste naveli skup jedne ili više određenih vrijednosti za procjenu u izrazu uvjeta WHERE ili HAVING.

Predikat ANY ili SOME, koji su sinonimi, koristite za dohvaćanje zapisa u glavnom upitu koji zadovoljavaju usporedbu sa zapisima dohvaćenima u podupitu. U sljedećem primjeru vraćaju se svi proizvodi čija je jedinična cijena veća od cijene bilo kojeg proizvoda koji se prodaje uz popust od 25 posto ili više:

SELECT * FROM Products WHERE UnitPrice > ANY (SELECT UnitPrice FROM OrderDetails WHERE Discount >= .25);

Predikat ALL koristite da biste dohvatili samo one zapise u glavnom upitu koji zadovoljavaju usporedbu sa svim zapisima dohvaćenima u podupitu. Ako ste u prethodnom primjeru BILO BILO promijenili u SVE, upit će vratiti samo one proizvode čija je jedinična cijena veća od cijene svih proizvoda koji se prodaju uz popust od 25 posto ili više. Ovo je mnogo restriktivnije.

Predikat IN koristite da biste dohvatili samo one zapise u glavnom upitu za koje neki zapis u podupitu sadrži jednaku vrijednost. U sljedećem primjeru vraćaju se svi proizvodi s popustom od 25 posto ili više:

SELECT * FROM Products WHERE ProductID IN (SELECT ProductID FROM OrderDetails WHERE Discount >= .25);

Isto tako, NOT IN možete koristiti za dohvaćanje samo onih zapisa u glavnom upitu za koje nijedan zapis u podupitu ne sadrži jednaku vrijednost.

Koristite predikat EXISTS (uz neobaveznu rezerviranu riječ NOT) u usporedbama true/false da biste utvrdili vraća li podupit zapise.

Uz to, pseudonime naziva tablice u podupitu možete koristiti za pozivanje na tablice navedene u uvjetu FROM izvan podupita. U sljedećem se primjeru vraćaju imena zaposlenika čija je plaća jednaka ili veća od prosječne plaće svih zaposlenika s istim radnim mjestom. Tablici Zaposlenici dodijeljen je 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 primjeru rezervirana riječ AS nije obavezna.

Neki su podupiti dopušteni u unakrsnim upitima, konkretno, kao predikati (oni u uvjetu WHERE). Podupiti kao izlaz (upiti na popisu SELECT) nisu dopušteni u unakrsnim upitima.