Простые вложенные подзапросы используются для представления множества значений, исследование которых должно осуществляться в каком-либо предикате IN. Оператор IN означает равенство любому из значений, полученных во внутреннем запросе.
Например, нужно выдать название поставщиков книг автором которых является Достоевский.
SELECT Название
FROM Поставщики
WHERE Код_поставщика IN
(SELECT DISTINCT Код_поставщика
FROM Книги
WHERE Автор = ‘Достоевский’);
Система выполняет прежде всего вложенный подзапрос. Этот подзапрос выдает множество уникальных кодов поставщиков, которые поставили книги заданного автора. Затем будет выполнен внешний запрос, результатом которого будут название этих поставщиков.
В подобных запросах можно использовать не только оператор IN, но и операторы сравнения (=,<>, <=, <, >= или >), однако, если вложенный подзапрос возвращает более одного значения и не используется оператор IN, будет возникать ошибка.
Коррелированные вложенные подзапросы.
Например, нужно выдать Код_заказа и Дату_заказа заказчика с именем Чайка Д.Л.
|
|
SELECT Код_заказа, Дату_заказа
FROM Заказы
WHERE ‘Чайка Д.Л.’ IN
(SELECT Имя
FROM Заказчики
WHERE Код_заказчика = Заказы.Код_заказчика);
Такой подзапрос отличается тем, что вложенный подзапрос не может быть обработан прежде, чем будет обрабатываться внешний подзапрос, поскольку вложенный подзапрос зависит от значения Заказы.Код_заказчика, а оно изменяется по мере того, как система проверяет различные строки таблицы Заказы.
При использовании в подзапросах с операторами сравнения операторы ANY, ALL необходимо учитывать, что: = ANY ‑ равно любому полученному значению. Соответствует логическому оператору OR.
>ANY (>=ANY) ‑ больше, (больше или равно) чем любое полученное число. Эквивалентно > (>=) для самого меньшего полученного числа.
<ANY (<=ANY) ‑ меньше, (меньше или равно) чем любое полученное число. Эквивалент < (<=) для самого большего полученного числа.
=ALL ‑ равно всем полученным значениям.
>ALL (>=ALL) ‑ больше, (больше или равно) чем все полученные числа. Эквивалент > (> =) для самого большего полученного числа.
<ALL (<=ALL) ‑ меньше, (меньше или равно) чем все полученные числа. Эквивалентно < (< =) самого меньшего полученного числа.