Підзапити SQL

Увага!: Цю статтю перекладено за допомогою служби машинного перекладу; див. застереження. Версію цієї статті англійською мовою див. тут для отримання довідки.

Підзапит — це оператор SELECT, вкладений в оператор SELECT, SELECT...INTO, INSERT...INTO, DELETE, UPDATE або в інший підзапит.

Синтаксис

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

порівняння [ANY | ALL | 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) у порівняннях «істинне/хибне», щоб визначити, чи повертає підзапит будь-які записи.

Також можна використовувати псевдоніми ім'я таблиці в підзапиту звернутися до таблиці, відображені в реченні 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). Підзапити вигляді (профілі користувачів у списку ВИБЕРІТЬ) у перехресні запити заборонено.



Примітка.: Застереження про машинний переклад: Цю статтю перекладено комп’ютерною системою без втручання людини. Корпорація Майкрософт пропонує таку послугу, щоб іншомовні користувачі могли дізнаватися про продукти, служби й технології Microsoft. Оскільки статтю перекладено за допомогою служби машинного перекладу, вона може містити смислові, синтаксичні або граматичні помилки.

Удосконалення навичок роботи з Office
Ознайомтеся з навчальними матеріалами
Отримуйте нові функції раніше за інших
Приєднайтеся до оцінювачів Office

Ця інформація корисна?

Дякуємо за ваш відгук!

Дякуємо за відгук! Схоже, вам може стати в нагоді допомога одного з наших спеціалістів служби підтримки Office, з яким ми вас можемо з’єднати.

×