Alampäring on SELECT-lause, mis on pesastatud SELECT-, SELECT-... INTO, INSERT... LAUSE INTO, DELETE või UPDATE või muus alampäringus.
Süntaks
Alampäringu loomiseks saate kasutada kolme süntaksivormi.
võrdlus [ANY | KÕIK | SOME] (sqlstatement)
avaldis [NOT] IN (sqlstatement)
[NOT] EXISTS (sqlstatement)
Alampäring koosneb järgmistest osadest.
Osa |
Kirjeldus |
Võrdlus |
avaldis ja võrdlusmärk, mis võrdleb avaldist alampäringu tulemitega. |
avaldis |
Avaldis, millest otsitakse alampäringu tulemikomplekti. |
sql-lause |
SELECT-lause, mis järgib sama vormingut ja reegleid nagu mis tahes muu SELECT-lause. See peab olema sulgudes. |
Kommentaarid
SELECT-lause väljaloendis või WHERE- või HAVING-klauslis saate avaldise asemel kasutada alampäringuid. Alampäringus saate SELECT-lause abil sisestada ühe või mitu konkreetset väärtust, mida saab WHERE- või HAVING-klausli avaldises väärtustada.
Põhipäringu kirjete toomiseks, mis vastavad alampäringus toodud kirjete võrdlusele, kasutage predikaati ANY või SOME, mis on sünonüümne. Järgmises näites tagastatakse kõik tooted, mille ühikuhind on suurem kui mis tahes 25 protsendilise allahindlusega müüdud toodete omast:
SELECT * FROM Products WHERE UnitPrice > ANY (SELECT UnitPrice FROM OrderDetails WHERE Discount >= .25);
Predikaadi ALL abil saate tuua ainult need põhipäringu kirjed, mis vastavad võrdlusele kõigi alampäringus toodud kirjetega. Kui muutsite eelmises näites sätte ANY väärtuseks ALL, tagastaks päring ainult need tooted, mille ühikuhind on suurem kui kõigi 25% või rohkema allahindlusega müüdud toodete omast. See on palju piiravam.
Predikaadi IN abil saate tuua ainult need põhipäringu kirjed, mille jaoks mõni alampäringu kirje sisaldab võrdset väärtust. Järgmises näites tagastatakse kõik tooted, mille allahindlus on 25 protsenti või rohkem.
SELECT * FROM Products WHERE ProductID IN (SELECT ProductID FROM OrderDetails WHERE Discount >= .25);
Teise võimalusena saate funktsiooni NOT IN kasutada ainult nende põhipäringu kirjete toomiseks, mille jaoks ükski alampäringu kirje ei sisalda võrdset väärtust.
Kasutage predikaati EXISTS (koos valikulise not-reserveeritud sõnaga) tõestes/väärades võrdlustes, et teha kindlaks, kas alampäring tagastab kirjed.
Lisaks saate alampäringus kasutada tabelinime pseudonüüme, et viidata tabelitele, mis on loetletud väljaspool alampäringuid FROM-klauslis. Järgmises näites tagastatakse nende töötajate nimed, kelle palgad on võrdsed või suuremad kui kõigi sama ametinimetusega töötajate keskmine palk. Tabelile Töötajad antakse pseudonüüm "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;
Eelmises näites on AS-i reserveeritud sõna valikuline.
Mõned alampäringud on ristpäringutes lubatud , täpsemalt predikaatidena (WHERE-klauslis). Alampäringud väljundina (SELECT-loendis olevad) pole ristpäringutes lubatud.