double arrow
Простые вложенные подзапросы

Простые вложенные подзапросы используются для представления множества значений, исследование которых должно осуществляться в каком-либо предикате 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) ‑ меньше, (меньше или равно) чем все полученные числа. Эквивалентно < (< =) самого меньшего полученного числа.







Сейчас читают про: