Подзапрос может не возвращать значения или возвращать несколько значений. Эта группа включает подзапросы, начинающиеся с IN, NOT IN или оператора сравнения с ключевыми словами ANY или ALL.
Подзапросы, начинающиеся с ключевого слова IN, имеют следующую общую форму:
Начало операторов SELECT, INSERT, UPDATE, DELETE или подзапроса
WHERE выражение [NOT] IN (подзапрос)
[Конец операторов SELECT, INSERT, UPDATE или подзапроса]
Результатом внутреннего подзапроса является список, включающий от нуля до нескольких значений.
Когда тот или иной подзапрос начинается с ключевого слова EXISTS, этот подзапрос функционирует как “тест на существование”. Ключевое слово EXISTS в предложении WHERE выполняет проверку на существование (или несуществование) данных, которые удовлетворяют критериям соответствующего подзапроса, т.е. EXISTS выполняет проверку на наличие или отсутствие “пустого набора” строк. Если подзапрос возвращает хотя бы одну строку, этот результат оценивается как “истина”. Если подзапрос возвращает пустой набор, этот результат оценивается как “ложь”.
Подзапросы, начинающиеся с ключевого слова EXISTS, имеют следующую общую форму:
Начало операторов SELECT, INSERT, UPDATE, DELETE или подзапроса
WHERE выражение [NOT] EXISTS (подзапрос)
[Конец операторов SELECT, INSERT, UPDATE или подзапроса]
В другом виде подзапросов, которые не возвращают или возвращают несколько строк, используют оператор сравнения, модифицированный ключевыми словами ANY или ALL. Подзапросы, начинающиеся с модифицированного оператора сравнения, имеют общую форму следующего вида:
Начало операторов SELECT, INSERT, UPDATE, DELETE или подзапроса
WHERE выражение оператор_сравнения [ANY | ALL] (подзапрос)
[Конец операторов SELECT, INSERT, UPDATE или подзапроса]
Что такое ANY и ALL. Если в качестве примера воспользоваться операторами сравнения “ > “, то “ > ALL” означает “больше, чем каждое значение” (другими словами, “больше, чем наибольшее значение”). Таким образом, “ > ALL (1,2,3) ” означает “больше, чем 3 ”. “ > ANY ” означает “больше, чем, по крайней мере, одно значение» (другими словами, “больше, чем наименьшее значение”). Таким образом, “ > ANY (1,2,3) ” означает “больше, чем 1”.
Таблица иллюстрирует различие между ключевыми словами ANY и ALL.
ALL
Результат
ANY
Результат
> ALL (1,2,3)
>3
> ANY (1,2,3)
>1
< ALL (1,2,3)
<1
< ANY (1,2,3)
<3
= ALL (1,2,3)
=1 или =2 или =3
= ANY (1,2,3)
=1 или =2 или =3
Пример. Найти сведения о сотрудниках организации, зарабатывающих больше, чем любой сотрудник отдела № 30:
SELECT DISTINCT Оклад, Фамилия, Должность, Отдел
FROM Сотрудники
WHERE Оклад > ANY ( SELECT Оклад FROM Сотрудники WHERE Отдел = 30)