Apakšvaicāums ir priekšraksts SELECT, kas ligzdots priekšrakstā SELECT, SELECT... INTO, INSERT... Priekšraksts INTO, DELETE vai UPDATE vai citā apakšvaicājuma.
Sintakse
Lai izveidotu apakšvaicājumu, var izmantot trīs sintakses formas:
salīdzinājums [ANY | ALL | SOME] (sql priekšraksts)
izteiksme [NOT] IN (sql priekšraksts)
[NOT] EXISTS (sql priekšraksts)
Apakšvaicājumam ir šādas daļas:
Daļa |
Apraksts |
salīdzinājums |
Datu izteiksme un salīdzināšanas operators, kas salīdzina izteiksmi ar apakšvaicājuma rezultātiem. |
izteiksme |
Izteiksme, kurā 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. Tā ir jāiekļauj iekavās. |
Piebildes
Varat izmantot apakšvaicājumu, nevis izteiksmi priekšraksta SELECT lauku sarakstā vai klauzulā WHERE vai HAVING. Apakšvaicājuma gadījumā jāizmanto priekšraksts SELECT, lai sniegtu vienu vai vairākas konkrētas vērtības 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 visiem ierakstiem, kas izgūti apakšvaicājumu. Šajā piemērā tiek atgriezti visi produkti, kuru vienības cena ir lielāka par jebkuru pārdoto produktu ar 25 vai vairāk procentu atlaidi:
SELECT * FROM Products WHERE UnitPrice > ANY (SELECT UnitPrice FROM OrderDetails WHERE Discount >= .25);
Izmantojiet predikātu ALL, lai izgūtu tikai tos galvenā vaicājuma ierakstus, kas apmierina salīdzinājumu ar visiem ierakstiem, kas izgūti apakšvaicājumu. Ja iepriekšējā piemērā mainījušās uz VISI, vaicājums atgriezīs tikai tos produktus, kuru vienības cena ir lielāka par visu pārdoto produktu cenu ar 25 vai vairāk procentu atlaidi. Tas ir daudz ierobežojošāk.
Predikātu IN izmantojiet, lai izgūtu tikai tos galvenā vaicājuma ierakstus, kuriem daži ieraksti apakšvaicājuma satur vienādu vērtību. Šajā piemērā tiek atgriezti visi produkti ar 25 vai vairāk procentu atlaidi:
SELECT * FROM Products WHERE ProductID IN (SELECT ProductID FROM OrderDetails WHERE Discount >= .25);
Savukārt NOT IN var izmantot, lai izgūtu tikai tos ierakstus galvenajā vaicājumā, kuriem neviens ieraksts apakšvaicājumam nesatur vienādu vērtību.
Izmantojiet predikātu EXISTS (ar neobligāto rezervēto vārdu NOT) patiesā/aplamā salīdzinājumi, lai noteiktu, vai apakšvaicājums atgriež ierakstus.
Varat arī izmantot tabulas nosaukumu aizstājvārdu apakšvaicājumu, lai atsauktos uz tabulām, kas norādītas klauzulā FROM ārpus apakšvaicājuma. Šajā piemērā tiek atgriezti to darbinieku vārdi, kuru algas ir vienādas vai lielākas par visu to darbinieku vidējo atalgojumu, kuriem ir vienāds amats. Tabulai Darbinieki ir 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ā AS datu rezervētais vārds nav obligāta.
Daži apakšvaicājumi ir atļauti krustvaicājuma vaicājumos, konkrēti kā predikāti (no klauzulas WHERE). Starptabtu vaicājumos apakšvaicājumi kā izvade (tie, kas ir sarakstā SELECT) nav atļauti.