SQL apakšvaicājumi

Attiecas uz
Access pakalpojumam Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Apakšvaicājums ir priekšraksts SELECT, ligzdots laukā SELECT, SELECT... INTO, IEVIETOT... IEVADIET, DELETE vai UPDATE vai citā apakšvaicājumā.

Sintakse

Lai izveidotu apakšvaicājumu, var izmantot trīs sintakses formas:

salīdzinājums [JEBKURŠ | VISI | SOME] (sql priekšraksts)

izteiksme [NOT] IN (sql priekšraksts)

[NĒ] EXISTS (sql priekšraksts)

Apakšvaicājumam ir šādas daļas:

Daļa Apraksts
salīdzinājums Izteiksme un salīdzināšanas operators, kas salīdzina izteiksmi ar apakšvaicājuma rezultātiem.
izteiksme Izteiksme, kurai tiek meklēta apakšvaicājuma rezultātu kopa.
sql priekšraksts Priekšraksts SELECT ar tādu pašu formātu un kārtulām kā jebkurš cits priekšraksts SELECT. Tas ir jāievieto iekavās.

      

Piezīmes

Priekšraksta SELECT lauku sarakstā vai klauzulā WHERE vai HAVING izteiksmes vietā var izmantot apakšvaicājumu. Apakšvaicājumā tiek izmantots priekšraksts SELECT, lai nodrošinātu vienu vai vairāku konkrētu vērtību kopu, ko novērtēt klauzulas WHERE vai HAVING izteiksmē.

Izmantojiet predikātu ANY vai SOME, kas ir sinonīmi, lai galvenajā vaicājumā izgūtu ierakstus, kas apmierina salīdzinājumu ar apakšvaicājumā izgūtajiem ierakstiem. Šajā piemērā tiek atgriezti visi produkti, kuru vienības cena ir lielāka par jebkura produkta vienības cenu, kas pārdots ar 25 procentu vai lielāku atlaidi:

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

Izmantojiet predikātu ALL, lai izgūtu tikai tos ierakstus galvenajā vaicājumā, kas atbilst salīdzinājumam ar visiem apakšvaicājumā izgūtajiem ierakstiem. Ja iepriekšējā piemērā mainījāt ANY uz ALL, vaicājums atgriezīs tikai tos produktus, kuru vienības cena ir lielāka par visu to produktu cenu, kas pārdoti ar 25% vai lielāku atlaidi. Tas ir daudz ierobežojošāks.

Izmantojiet predikātu IN, lai galvenajā vaicājumā izgūtu tikai tos ierakstus, kuriem kādā apakšvaicājuma ierakstā ir vienāda vērtība. Šajā piemērā tiek atgriezti visi produkti ar 25 procentu vai lielāku atlaidi:

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

Savukārt NOT IN varat izmantot, lai galvenajā vaicājumā izgūtu tikai tos ierakstus, kuriem nevienā apakšvaicājuma ierakstā nav vienādas vērtības.

Izmantojiet predikātu EXISTS (ar neobligāto rezervēto vārdu NOT) patieso/aplamo salīdzinājumos, lai noteiktu, vai apakšvaicājums atgriež kādus ierakstus.

Tabulu nosaukumu aizstājvārdus var izmantot arī apakšvaicājumā, lai atsauktos uz tabulām, kas ir norādītas klauzulā FROM ārpus apakšvaicājuma. Šajā piemērā tiek atgriezti to darbinieku vārdi, kuru alga ir vienāda ar vai lielāka par vidējo algu visiem darbiniekiem, kuriem ir vienāds amata nosaukums. Tabulai Employees tiek piešķirts aizstājvārds "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;

Iepriekšējā piemērā rezervētais vārds AS nav obligāts.

Daži apakšvaicājumi ir atļauti krustvaicājumos, konkrēti kā predikāti (tie, kas ir klauzulā WHERE). Apakšvaicājumi kā izvade (sarakstā SELECT) nav atļauti krustvaicājumos.