Использование ключевых слов SOME (ANY) и ALL с предикатами сравнения |
||||||||||||||
SOME и ANY являются синонимами, то есть может использоваться любое из них. Результатом подзапроса является один столбец величин. Если хотя бы для одного значения V, получаемого из подзапроса, результат операции "<значение выражения> <оператор сравнения> V" равняется TRUE, то предикат ANY также равняется TRUE.
Исполняется так же, как и ANY, однако значение предиката ALL будет истинным, если для всех значений V, получаемых из подзапроса, предикат "<значение выражения> <оператор сравнения> V" дает TRUE. Пример 5.8.1. Найти поставщиков компьютеров, моделей которых нет в продаже (то есть модели этих поставщиков отсутствуют в таблице PC)
Оказалось, что только у поставщика Е есть модели, отсутствующие в продаже:
Рассмотрим подробно этот пример. Предикат
вернет значение TRUE, если модель, определяемая полем model основного запроса, найдется в списке моделей таблицы РС (возвращаемом подзапросом). Поскольку предикат используется в запросе с отрицанием NOT, то значение TRUE будет получено, если модели не окажется в списке. Этот предикат проверяется для каждой записи основного запроса, которыми являются все модели ПК (предикат type = 'pc') из таблицы Product. Результирующий набор состоит из одного столбца — имени производителя. Чтобы один производитель не выводился несколько раз (что может случиться, если он производит несколько моделей, отсутствующих в таблице РС), используется служебное слово DISTINCT, исключающее дубликаты. Пример 5.8.2. Найти модели и цены портативных компьютеров, стоимость которых превышает стоимость любого ПК
Приведем формальные правила оценки истинности предикатов, использующих параметры ANY|SOME и ALL.
Рекомендуемые упражнения: 17, 24, 51, 67, 68, 74, 79, 127 |