Една подзаявка е инструкция за ИЗБИРАНЕ, вложена в избор, изберете... В, ВМЪКВАНЕ... В, изтриване или актуализиране на декларация или в друга подзаявка.
Синтаксис
Можете да използвате три формуляра за синтаксис, за да създадете подзаявка:
сравнение [всеки | ВСИЧКИ | НЯКОИ] (sqlstatement)
Expression [not] in (sqlstatement)
НЕ СЪЩЕСТВУВА (sqlstatement)
Една подзаявка съдържа следните части:
Част |
Описание |
сравнение |
израз и оператор за сравнение, който сравнява израза с резултатите от подзаявката. |
израз |
Израз, за който се търси наборът от резултати от подзаявката. |
sql_инструкция |
Командата SELECT, като следвате същия формат и правила като всяка друга инструкция за ИЗБИРАНЕ. Той трябва да е ограден в скоби. |
Забележки
Можете да използвате подзаявка вместо израз в списъка с полета на команда SELECT или в клауза WHERE или HAVING. В подзаявка използвайте командата SELECT, за да предоставите набор от една или повече определени стойности, които да се оценят в израза WHERE или HAVING.
Използвайте всички или някои предикати, които са синоними, за извличане на записи в основната заявка, които удовлетворяват сравнението с всички записи, извлечени в подзаявката. Следващият пример връща всички продукти, чиято единична цена е по-голяма от тази на всеки продукт, продаден при намаление от 25 процента или повече:
SELECT * FROM Products WHERE UnitPrice > ANY (SELECT UnitPrice FROM OrderDetails WHERE Discount >= .25);
Използвайте ALL предикат за извличане само на тези записи в основната заявка, които удовлетворяват сравнението с всички записи, извлечени в подзаявката. Ако сте променили някои от всички в предишния пример, заявката би върнала само онези продукти, чиято единична цена е по-голяма от тази на всички продукти, продадени с отстъпка от 25 процента или повече. Това е много по-рестриктивно.
Използвайте в предикат, за да извлечете само тези записи в основната заявка, за която някакъв запис в подзаявката съдържа еднаква стойност. Следващият пример връща всички продукти с отстъпка от 25 процента или повече:
SELECT * FROM Products WHERE ProductID IN (SELECT ProductID FROM OrderDetails WHERE Discount >= .25);
Напротив, можете да използвате не за извличане само на тези записи в основната заявка, за която няма запис в подзаявката, съдържа еднаква стойност.
Използвайте предиката СЪЩЕСТВУВА (със запазената дума незадължително) в TRUE/FALSE сравнение, за да определите дали подзаявката връща всички записи.
Можете също да използвате псевдоними за имена на таблици в подзаявка, за да препращате към таблици, които са посочени в клаузата FROM извън подзаявката. Следващият пример връща имената на служителите, чиито възнаграждения са равни или по-големи от средната заплата на всички служители, които имат една и съща длъжност. Таблицата служители е дала псевдоним "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;
В предишния пример запазена дума като е по желание.
Някои подзаявки са позволени в кръстосани заявки – по-конкретно като предикати (тези в клаузата WHERE). Подзаявките като изход (тези в списъка за ИЗБИРАНЕ) не са разрешени за кръстосани заявки.