Использование операций exists и NOT exists

SELECT

ALL

SELECT

FROM

SELECT

SELECT

Использование слов ANY и ALL

FROM Товары INNER JOIN

( Клиенты INNER JOIN Продажи ON Клиенты.ID_Клиента = Продажи.Клиент) ON Товары. ID_Товара= Продажи.Товар

WHERE Товары.Страна_производитель <> ‘Россия’

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

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

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

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

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

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

Клиенты.Фамилия,

Продажи.Количество_ед_товара

FROM Клиенты INNER JOIN Продажи

(ON Клиенты.ID_клиента= Продажи.Клиент

WHERE Продажи. Количество_ед_товара >= ALL (SELECT Количество_ед_товара FROM Продажи)

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

Пример 14. Найти клиента, купившего товаров на сумму, превышающую 30000 рублей.

Клиенты.Фамилия,

Sum (Товары.Цена_ед_товара * Продажи.Количество_ед_товара) AS Общая_стоимость

Товар INNER JOIN ( Клиенты INNER JOIN Продажи

ON Клиенты.ID_клиента= Продажи.Клиент)

ON Товар.ID_товара = Продажи.Товар

GROUP BY Клиенты.Название_фирмы

HAVING Sum (Товары.Цена_ед_товара * Продажи.Количество_ед_товара) > 30000

Пример 15. Определить клиента, который приобрел товаров на самую большую сумму.

Клиенты.Фамилия,

Sum (Товары.Цена_ед_товара * Продажи.Количество_ед_товара) AS Общая_стоимость

FROM Товар INNER JOIN ( Клиенты INNER JOIN Продажи

ON Клиенты.ID_клиента= Продажи.Клиент)

ON Товар.ID_товара = Продажи.Товар

GROUP BY Клиенты.Фамилия

HAVING Sum (Товары.Цена_ед_товара * Продажи.Количество_ед_товара) >=

Sum (Товары.Цена_ед_товара * Продажи.Количество_ед_товара)

FROM Товар INNER JOIN Продажи ON Товар.ID_товара = Продажи.Товар)

Здесь вложенный подзапрос подсчитывает общую стоимость покупок каждого клиента.

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

Ключевые слова EXISTS и NOT EXISTS предназначены для использования только совместно с подзапросами.

Результат их обработки представляет собой логическое значение True или False.

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

Если результирующая таблица подзапроса пуста, результатом обработки операции EXISTS будет значение False.

Для ключевого слова NOT EXISTS используются правила обработки, обратные по отношению к ключевому слову EXISTS.

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

Пример 16. Вывести список товаров из категории «Хлебобулочные».


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



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