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

FROM HR.Employees AS E




WHERE E.lastname LIKE N'B%');

GO

Запрос выдает номера заказов (только одна фамилия начинается на букву B):

 

Так как подзапрос может вернуть несколько значений, то такой подзапрос некорректен и может в каких-то случаях завершиться ошибкой.

SELECT orderid

FROM Sales.Orders

WHERE empid =

(SELECT E.empid

FROM HR.Employees AS E

WHERE E.lastname LIKE N'D%');

GO

Для другой буквы (D) запрос выдает ошибку:

Msg 512, Level 16, State 1, Line 1

Subquery returned more than 1 value. This is not permitted when the subquery follows =,!=, <, <=, >, >= or when the subquery is used as an expression.

 

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

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

Подзапрос с множеством значений — это подзапрос, который возвращает множественные значения в виде одного столбца.

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

Предикат in применяется в следующем виде:

<скалярное_выражение> IN (<подзапрос_с__множеством_значений>)

Если скалярное_выражение равно одному из значений, возвращенных подзапросом, предикат принимает значение TRUE.

Корректный запрос предыдущего примера будет иметь следующий вид:

SELECT orderid

FROM Sales.Orders

WHERE empid IN

(SELECT E.empid

FROM HR.Employees AS E

WHERE E.lastname LIKE N'D%');

 

Пример: выбор информации о клиентах из USA

SELECT custid, orderid, orderdate, empid

FROM Sales.Orders

WHERE custid IN

(SELECT C.custid

FROM Sales.Customers AS C

WHERE C.country = N'USA');

 

Пример: выбор информации о клиентах, не сделавших ни одного заказа

SELECT custid, companyname

FROM Sales.Customers

WHERE custid NOT IN

(SELECT O.custid

FROM Sales.Orders AS O);

Пример. Определить список товаров, которые имеются на складе.

SELECT Название

FROM Товар

WHERE КодТовара In

(SELECT КодТовара FROM Склад)

Пример. Определить список отсутствующих на складе товаров.

SELECT Название

FROM Товар

WHERE КодТовара Not In (SELECT КодТовара

FROM Склад)

 

Механизм SQL server обеспечивает удаление дубликатов.

 

В общем случае, применяемые к подзапросу операции основаны на тех операциях, которые, в свою очередь, применяются к множеству, а именно:

· { WHERE | HAVING } выражение [ NOT ] IN (подзапрос);

· { WHERE | HAVING } выражение оператор_сравнения { ALL | SOME | ANY } (подзапрос);

· {WHERE | HAVING } [ NOT ] EXISTS (подзапрос);

Ключевые слова SOME и ANY эквивалентны.

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

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

Если в результате выполнения подзапроса получено пустое значение, то для ключевого слова ALL условие сравнения будет считаться выполненным, а для ключевого слова ANY – невыполненным.

 

Поделиться:





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



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