Отнася се за
Access за Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Подзаявката е команда SELECT, вложена в SELECT, SELECT... В, ВМЪКВАНЕ... КОМАНДА INTO, DELETE или UPDATE или в друга подзаявка.

Синтаксис

Можете да използвате три форми на синтаксис, за да създадете подзаявка:

сравнение [ANY | ВСИЧКИ | SOME] (sqlstatement)

израз [NOT] IN (sql_команда)

[НЕ] [НЯМА] EXISTS (sql_команда)

Подзаявката има следните части:

Част

Описание

Сравнение

Оператор за израз и оператор за сравнение, който сравнява израза с резултатите от подзаявката.

израз

Израз, за който се търси наборът от резултати на подзаявката.

sql_инструкция

Команда SELECT, следваща същия формат и правила като всяка друга команда SELECT. То трябва да е оградено в скоби.

Забележки

Можете да използвате подзаявка вместо израз в списъка с полета на команда SELECT или в клауза WHERE или HAVING. В подзаявка използвате команда SELECT, за да предоставите набор от една или повече конкретни стойности за оценяване в израза на клаузата WHERE или HAVING.

Използвайте предиката ANY или SOME, които са синоними, за да извлечете записи в основната заявка, които удовлетворяват сравнението с всички записи, извлечени в подзаявката. Следващият пример връща всички продукти, чиято единична цена е по-голяма от тази на всеки продукт, продаден с отстъпка от 25 процента или повече:

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

Използвайте предиката ALL, за да извлечете само тези записи в основната заявка, които удовлетворяват сравнението с всички записи, извлечени в подзаявката. Ако сте променили ANY на ALL в предишния пример, заявката ще върне само тези продукти, чиято единична цена е по-голяма от тази на всички продукти, продадени с отстъпка от 25 процента или повече. Това е много по-ограничаващо.

Използвайте предиката IN, за да извлечете само тези записи в основната заявка, за които някои записи в подзаявката съдържат еднаква стойност. Следващият пример връща всички продукти с отстъпка от 25 процента или повече:

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

Обратно, можете да използвате NOT IN, за да извлечете само тези записи в основната заявка, за които нито един запис в подзаявката не съдържа еднаква стойност.

Използвайте предиката EXISTS (с незадължителната запазена дума NOT) в сравнения "истина/неистина", за да определите дали подзаявката връща записи.

Можете също да използвате псевдоними на имена на таблици в подзаявка, за да препращате към таблици, изброени в клауза FROM извън подзаявката. Следващият пример връща имената на наетите лица, чиито заплати са равни на или по-големи от средната заплата на всички служители с еднаква длъжност. На таблицата Employees се дава псевдонимът "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;

В предишния пример as запазена дума е незадължително.

Някои подзаявки са разрешени в кръстосани заявки – по-конкретно като предикати (тези в клаузата WHERE). Подзаявките като изход (тези в списъка SELECT) не са разрешени в кръстосани заявки.

Нуждаете ли се от още помощ?

Искате ли още опции?

Разгледайте ползите от абонамента, прегледайте курсовете за обучение, научете как да защитите устройството си и още.