Ключевые слова ANY и ALL могут использоваться с подзапросами, возвращающими один столбец чисел.
Если подзапросу будет предшествовать ключевое слово ALL, условие сравнения считается выполненным, только когда оно выполняется для всех значений в результирующем столбце подзапроса.
Если записи подзапроса предшествует ключевое слово ANY, то условие сравнения считается выполненным, когда оно выполняется хотя бы для одного из значений в результирующем столбце подзапроса.
Если в результате выполнения подзапроса получено пустое значение, то для ключевого слова ALL условие сравнения будет считаться выполненным, а для ключевого слова ANY – невыполненным. Ключевое слово SOME является синонимом слова ANY.
Пример 49. Определить клиентов, совершивших сделки с максимальным количеством товара.
SELECT Клиент.Фамилия, Сделка.Количество
FROM Клиент INNER JOIN Сделка
ON Клиент.КодКлиента=Сделка.КодКлиента
WHERE Сделка.Количество>=ALL(SELECT Количество
FROM Сделка)
В примере определены клиенты, в сделках которых количество товара больше или равно количеству товара в каждой из всех сделок.
Пример 50. Найти фирму, купившую товаров на сумму, превышающую 10000 руб.
SELECT Клиент.Фирма,
Sum(Товар.Цена*Сделка.Количество)
AS Общ_стоимость
FROM Товар INNER JOIN
(Клиент INNER JOIN Сделка
ON Клиент.КодКлиента=Сделка.КодКлиента)
ON Товар.КодТовара=Сделка.КодТовара
GROUP BY Клиент.Фирма
HAVING Sum(Товар.Цена*Сделка.Количество)>10000
Добавим в запрос подзапрос.
Пример 51. Найти фирму, которая приобрела товаров на самую большую сумму.
SELECT Клиент.Фирма,
Sum(Товар.Цена*Сделка.Количество)
AS Общ_стоимость
FROM Товар INNER JOIN
(Клиент INNER JOIN Сделка
ON Клиент.КодКлиента=Сделка.КодКлиента)
ON Товар.КодТовара=Сделка.КодТовара
GROUP BY Клиент.Фирма
HAVING Sum(Товар.Цена*Сделка.Количество)>=
ALL(SELECT Sum(Товар.Цена*Сделка.Количество)
FROM Товар INNER JOIN Сделка
ON Товар.КодТовара=Сделка.КодТовара
GROUP BY Сделка.КодКлиента)
Вложенный подзапрос подсчитывает общую стоимость покупок каждого клиента. Внешний подзапрос также подсчитывает общую стоимость покупок каждого клиента и определяет тех, для кого эта сумма, по сравнению с другими покупателями, оказалась больше или точно такой же.
Пример 52. Найти фирмы, в сделках которых количество товара превышает такой же показатель хотя бы в одной сделке клиентов из Самары.