Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

FROM AdventureWorks.Sales.SalesOrderDetail AS OrdDet




WHERE Ord.SalesOrderID = OrdDet.SalesOrderID) AS MaxUnitPrice

FROM AdventureWorks.Sales.SalesOrderHeader AS Ord

 

Вложенный во внешнюю инструкцию SELECT запрос, имеет следующие компоненты:

· обычный запрос SELECT, включающий обычные компоненты списка выборки;

· обычное предложение FROM, включающее одно или более имен таблиц или представлений;

· необязательное предложение WHERE;

· необязательное предложение GROUP BY;

· необязательное предложение HAVING.

 

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

· фраза ORDER BY не используется, хотя и может присутствовать во внешнем подзапросе;

· список в предложении SELECT состоит из имен отдельных столбцов или составленных из них выражений – за исключением случая, когда в подзапросе присутствует ключевое слово EXISTS;

· по умолчанию имена столбцов в подзапросе относятся к таблице, имя которой указано в предложении FROM. Однако допускается ссылка и на столбцы таблицы, указанной во фразе FROM внешнего запроса, для чего применяются квалифицированные имена столбцов (т.е. с указанием таблицы или полные имена);

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

 

Подзапрос может быть

· однозначным (скалярный);

· многозначным;

· табличным.

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

Использование подзапросов, возвращающих единичное значение

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

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

FROM Сделка

WHERE Количество=(SELECT Max(Количество) FROM Сделка)

 

Примечание: нельзя прямо использовать предложение WHERE Количество=Max(Количество), поскольку применять агрегирующие функции в предложениях WHERE запрещено. Для достижения желаемого результата следует создать подзапрос, вычисляющий максимальное значение количества, а затем использовать его во внешнем операторе SELECT, предназначенном для выборки дат сделок, где количество товара совпало с максимальным значением.

Во вложенном подзапросе определяется максимальное количество товара. Во внешнем подзапросе – дата, для которой количество товара оказалось равным максимальному.

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

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

Количество -(SELECT Avg(Количество)

FROM Сделка) AS Превышение

FROM Сделка

WHERE Количество>

(SELECT Avg(Количество)

FROM Сделка)

 

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

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

 

Пример скалярного подзапроса для вывода номеров всех сотрудников, фамилии которых начинаются с буквы B.

SELECT orderid

FROM Sales.Orders

WHERE empid =

(SELECT E.empid

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...