Признаками использования кванторов являются слова в задании: все, только один, хотя бы. Список кванторов приведен в Табл. 9.
Вывести названия товаров, которые хотя бы раз продавались (запрос приведен на Лист. 34, результат - Табл. 48):
Лист. 34. Запрос с квантором Exists
SELECT Название
FROM Товары
WHERE exists
(SELECT * FROM Сделки WHERE Товары.N = Сделки.N_Товара);
Табл. 48. Результат запроса с квантором Exists
28 Exists
Название
Шило
Мыло
Ошибка №12. Во вложенном подзапросе используются атрибуты таблиц, которые перечисляются во внешнем запросе, но не перечисляются во вложенном. В случае перечисления этих таблиц во вложенном подзапросе, подзапрос перестанет быть зависимым от внешнего и результат будет другим.
Вывести номера и имена продавцов, которые продавали мыло хотя бы раз (запрос приведен на Лист. 35, результат - Табл. 49):
Лист. 35. Запрос с квантором Any
SELECT Продавцы.N, Продавцы.Имя
FROM Продавцы, Товары
WHERE Товары.Название = ‘Мыло’
AND Товары.N = ANY
(SELECT N_Товара FROM Сделки WHERE Продавцы.N = Сделки.N_Продавца);
Табл. 49. Результат запроса с квантором Any
30 Any
N
Имя
Иванов
Петров
Ошибка №13.Кванторы any и exists часто путают. Обратите внимание на разницу в использовании. Exists используют без условия, any – с условием. Оба примера соединяют две таблицы, опосредованно связанные третьей. Но в случае exists в подзапросе два условия связи внутренней и двух внешних таблиц, а в запросе с any – одно (другая связь заключается в условии).
Вывести номера и имена продавцов, все заключенные сделки которых включали продажу мыла (запрос приведен на Лист. 36, результат - Табл. 50):
Лист. 36. Запрос с квантором All
SELECT Продавцы.N, Продавцы.Имя
FROM Продавцы, Товары
WHERE Товары.Название = 'Мыло'
AND Товары.N = ALL
(SELECT N_Товара FROM Сделки WHERE Продавцы.N = Сделки.N_Продавца);
Табл. 50. Результат запроса с квантором All
29 All
N
Имя
Петров
Вывести номера и имена продавцов, которые заключили только одну сделку, причем с мылом (запрос приведен на Лист. 37):
Лист. 37 Запрос с квантором Singular
SELECT Продавцы.N, Продавцы.Имя
FROM Продавцы, Товары
WHERE Товары.Название = ‘Мыло’
AND Товары.N = SINGULAR
(SELECT N_Товара FROM Сделки WHERE Продавцы.N = Сделки.N_Продавца);
Вывести имена продавцов и названия товаров, которые они продавали, в случае, если продавец еще не продал ни одного товара, вывести пусто (запрос приведен на Лист. 38):