Підлеглі запити sql
Інструкція SELECT, яка відповідає формату і всіма правилами, прийнятим для інструкцій SELECT. Вона повинна бути укладена в круглі дужки.
додаткові відомості
Підлеглий запит можна використовувати замість вираження в списку полів інструкції SELECT або в пропозиціях WHERE і HAVING. Інструкція SELECT використовується в підпорядкованому запиті для завдання набору конкретних значень, що обчислюються в виразах пропозицій WHERE або HAVING.
Предикати ANY або SOME, є синонімами, використовуються для відбору записів в головному запиті, які задовольняють порівнянні з усіма записами, відібраними в підпорядкованому запиті. У наступному прикладі відбираються всі товари, ціна яких більше, ніж ціна будь-якого товару, проданого зі знижкою в 25 відсотків або більше:
SELECT * FROM Товари
WHERE Ціна> ANY
(SELECT Ціна FROM Замовлено
WHERE Знижка> = .25);
Предикат ALL використовується для відбору в головному запиті тільки тих записів, які задовольняють порівнянні з усіма записами, відібраними в підпорядкованому запиті. Якщо в попередньому прикладі предикат ANY замінити предикатом ALL, результат запиту буде включати тільки ті товари, чия ціна більше, ніж ціна всіх товарів, проданих зі знижкою 25 або більше. Ця умова є значно більш жорстким.
Предикат IN використовується для відбору в головному запиті тільки тих записів, які містять значення, що збігаються з одним з відібраних підлеглим запитом. Наступний приклад повертає всі товари, продані зі знижкою, більшою чи рівною 25 відсоткам:
SELECT * FROM Товари
WHERE КодТовара IN
(SELECT КодТовара FROM Замовлено
WHERE Знижка> = .25);
І навпаки, предикат NOT IN використовується для відбору в головному запиті тільки тих записів, які містять значення, що не збігаються ні з одним з відібраних підлеглим запитом.
Предикат EXISTS (з необов'язковим зарезервованим словом NOT) використовується в логічному вираженні для визначення того, чи повинен підлеглий запит повертати будь-які записи.
У підпорядкованому запиті можна використовувати псевдоніми таблиць для посилання на таблиці, перераховані в реченні FROM, розташованому поза підлеглого запиту. У наступному прикладі відбираються прізвища та імена співробітників, чия зарплата дорівнює або більше середньої зарплати співробітників, що мають ту ж посаду. В даному прикладі таблиця «Співробітники» отримує псевдонім «Т1»:
Ім'я, Посада, Оклад
FROM Співробітники AS T1
WHERE T1.Должность = Сотруднікі.Должность) Order by Посада;
В останньому прикладі зарезервоване слово не є обов'язковим.
Деякі підлеглі запити можна використовувати в перехресних запитах як предикати (в реченні WHERE). Підлеглі запити, які використовуються для виведення результатів (в списку SELECT), не можна використовувати в перехресних запитах.