Скалярные подзапросы

Вложенные запросы

Лекция 8

Часто невозможно решить поставленную задачу путем одного запроса. Это особенно актуально, когда при использовании условия поиска в предложении WHERE значение, с которым нужно сравнивать, заранее не определено и должно быть вычислено в момент выполнения оператора.

В таком случае используются операторы SELECT, встроенные в тело другого оператора SELECT.

При этом внешний оператор SELECT использует результат выполнения внутреннего оператора для определения множества, из которого происходит выбор.

Такие операторы получили название подзапросов или вложенных запросов.

Подзапросы могут быть помещены после операторов сравнения

(=, <, >, <=, >=, <>)

в предложениях WHERE и HAVING внешнего оператора SELECT.

Таким образом, подзапрос – это ключ доступа в предложениях WHERE и HAVING, инструмент создания временной таблицы, содержимое которой извлекается и обрабатывается внешним оператором SELECT.

Подзапросымогут также применяться в операторах

· INSERT,

· UPDATE,

· DELETE.

К подзапросам применяются следующие правила и ограничения:

1. В подзапросе фраза ORDER BY не используется, но она может присутствовать во внешнем запросе.

2. Список в подзапросе должен состоять из имен отдельных столбцов или предложений, составленных из имен столбцов (за исключением случая, когда в подзапросе присутствует ключевое слово EXISTS).

3. По умолчанию имена столбцов в подзапросе относятся к таблице, имя которой указано в предложении FROM подзапроса.

Однако допускается ссылка и на столбцы таблицы, указанной в предложении FROM внешнего запроса, но при этом имена столбцов нужно указывать с именем таблицы.

4. Если подзапрос является одним из операндов в операции сравнения, то он должен указываться только в правой части этой операции.

Существуют два типа подзапросов:

· Скалярный подзапрос, который возвращает единственное значение. Он может использоваться везде, где требуется указать единственное значение.

· Табличный подзапрос, который возвращает множество значений, то есть значения из одного или нескольких столбцов таблицы, и эти значения размещаются в нескольких строках. Он может использоваться везде, где допускается наличие таблицы.


Пример 1. Определить дату продажи максимальной партии товара.

Declare @a nchar(50);

Select @a=’Максимальное количество товара’

Select @a;

SELECT Дата, Количество_ед_товара

FROM Продажи

WHERE Количество_ед_товара =

(SELECT Max (Количество_ед_товара) FROM Продажи)

Отметим, что здесь нельзя прямо использовать предложение

WHERE Количество_ед_товара = Max (Количество_ед_товара),

так как просто использовать агрегирующие функции в предложении WHERE запрещено.

Пример 2. Определить даты продаж, в которых количество проданного товара превышало среднее значение от всего проданного товара.

Для этих сделок указать превышение над средним значением.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



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