Пример 7.7. Определение списка товаров, которые имеются на складе.
Использование операций IN и NOT IN
Использование подзапросов, возвращающих множество значений
Пример 7.6. Определение даты, когда среднее количество проданного за день товара оказалось больше среднего показателя по всем сделкам вообще.
Пример 7.5. Определение даты, когда среднее количество проданного за день товара оказалось больше 20 единиц.
За каждый день определяется среднее количество товара, которое сравнивается с числом 20. Добавим в запрос подзапрос.
Пример 7.6. Определить даты, когда среднее количество проданного за день товара оказалось больше среднего показателя по всем сделкам вообще.
SELECT Сделка.Дата,
Avg(Сделка.Количество)
AS Среднее_за_день
FROM Сделка
GROUP BY Сделка.Дата
HAVING Avg(Сделка.Количество)>
(SELECT Avg(Сделка.Количество)
FROM Сделка)
Внутренний подзапрос определяет средний по всем сделкам показатель, с которым во внешнем запросе сравнивается среднее за каждый день количество товара.
Во многих случаях значение, подлежащее сравнению в предложениях WHERE или HAVING, представляет собой не одно, а несколько значений. Вложенные подзапросыгенерируют непоименованное промежуточное отношение, временную таблицу. Оно может использоваться только в том месте, где появляется в подзапросе. К такому отношению невозможно обратиться по имени из какого-либо другого места запроса. Применяемые к подзапросу операции основаны на тех операциях, которые, в свою очередь, применяются к множеству, а именно:
{ WHERE | HAVING } выражение [ NOT ] IN ( подзапрос );
{ WHERE | HAVING } выражение оператор_сравнения { ALL | SOME | ANY } ( подзапрос );
{WHERE | HAVING } [ NOT ] EXISTS ( подзапрос );
Оператор IN используется для сравнения некоторого значения со списком значений, при этом проверяется, входит ли значение в предоставленный список или сравниваемое значение не является элементом представленного списка.
Пример 7.7. Определить список товаров, которые имеются на складе.
SELECT Название
FROM Товар
WHERE КодТовара In
(SELECT КодТовара FROM Склад)
Пример 7.8. Определить список отсутствующих на складе товаров.
SELECT Название
FROM Товар
WHERE КодТовара Not In (SELECT КодТовара
FROM Склад)
Пример 7.9. Определить товары, которые покупают клиенты из Москвы.