Использование операций 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. Вывести список товаров из категории «Хлебобулочные».