Застосовується доAccess для Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Підзапит – це оператор SELECT, вкладений у select, SELECT... INTO, INSERT... Оператор INTO, DELETE, UPDATE або всередині іншого підзапиту.

Синтаксис

Щоб створити підзапит, можна скористатися трьома формами синтаксису:

порівняння [ANY | УСІ | SOME] (sqlstatement)

вираз [NOT] IN (sqlstatement)

[NOT] EXISTS (sqlstatement)

Підзапит містить такі частини:

Частина

Опис

Порівняння

вираз та оператор порівняння, який порівнює вираз із результатами підзапиту.

вираз

Вираз, для якого шукається набір результатів підзапиту.

sqlstatement

Оператор 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) у порівняннях зі значенням 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;

У попередньому прикладі зарезервоване слово AS необов'язковий.

Деякі підзапити можна використовувати в перехресних запитах , зокрема як предикати (ті, що містяться в реченні WHERE). Підзапити як вихідні (ті, що містяться в списку SELECT) не можна використовувати в перехресних запитах.

Потрібна додаткова довідка?

Потрібні додаткові параметри?

Ознайомтеся з перевагами передплати, перегляньте навчальні курси, дізнайтесь, як захистити свій пристрій тощо.