Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SQL (от Сани Сафронова).doc
Скачиваний:
71
Добавлен:
03.06.2015
Размер:
969.22 Кб
Скачать

Использование ключевых слов some | any и all с предикатами сравнения

<выражение> <оператор сравнения> SOME|ANY (<подзапрос>)

SOME и ANY являются синонимами, т.е. может использоваться любое из них. Результатом подзапроса является один столбец величин. Если для какого-нибудь значения V, получаемого из подзапроса, результат операции "<значение выражения> <оператор сравнения> V " равняется TRUE, то предикат ANY также равняется TRUE.

<выражение> <оператор сравнения> ALL (<подзапрос>)

исполняется так же, как и ANY, но для всех значений, получаемых из подзапроса, проверка должна удовлетворять результату TRUE для предиката "<значение выражения> <оператор сравнения> V ".

Пример. Найти поставщиков компьютеров, моделей которых нет в продаже (т.е. отсутствуют в таблице PC):

SELECT DISTINCT maker FROM Product WHERE type = 'PC' AND NOT model = ANY        (SELECT model        FROM PC);

Оказалось, что только у поставщика Е есть модели отсутствующие в продаже:

maker

E

Рассмотрим подробно этот пример. Предикат

model = ANY (SELECT model FROM PC);

вернет значение TRUE, если модель, определяемая полем model основного запроса, найдется в списке моделей таблицы PC (возвращаемом подзапросом). Поскольку предикат используется в запросе с отрицанием NOT, то значение TRUE будет получено, если модели не окажется в списке. Этот предикат проверяется для каждой записи основного запроса, которыми являются все модели ПК (предикат type = 'PC') из таблицы Product. Результирующий набор состоит из одного столбца - имени производителя. Чтобы один производитель не выводился несколько раз (что может случиться, если он производит несколько моделей, отсутствующих в таблице PC), используется служебное слово DISTINCT.

Пример. Найти модели и цены ПК-блокнотов, стоимость которых превышает стоимость любого ПК:

SELECT DISTINCT model, price FROM Laptop WHERE price > ALL        (SELECT price        FROM PC);

model

price

1298

1050.0

1750

1200.0

1752

1150.0

Приведем формальные правила оценки предикатов, использующих параметры ANY|SOME и ALL:

  • Если определен параметр ALL или SOME и все результаты сравнения значения выражения и каждого значения, полученного из подзапроса, являются TRUE, истинностное значение равно TRUE.

  • Если результат выполнения подзапроса не содержит строк и определен параметр ALL, результат равен TRUE. Если же определен параметр SOME, результат равен FALSE.

  • Если определен параметр ALL и результат сравнения значения выражения хотя бы с одним значением, полученным из подзапроса, является FALSE, истинностное значение равно FALSE.

  • Если определен параметр SOME и хотя бы один результат сравнения значения выражения и значения, полученного из подзапроса, является TRUE, истинностное значение равно TRUE.

  • Если определен параметр SOME и каждое сравнение значения выражения и значений, полученных из подзапроса, равно FALSE, истинностное значение тоже равно FALSE.

  • В любом другом случае результат будет равен UNKNOWN.

Рекомендуемые упражнения: 17, 24, 30.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]