loading..
Русский    English
01:15
листать

Использование ключевых слов SOME (ANY) и ALL с предикатами сравнения

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

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

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

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

Пример 5.8.1.

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

Консоль
Выполнить
  1. SELECT DISTINCT maker
  2. FROM Product
  3. WHERE type = 'pc' AND
  4. NOT model = ANY (SELECT model
  5. FROM PC
  6. );

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

Maker
E

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

  1. model = ANY (SELECT model
  2. FROM PC
  3. );

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

Пример 5.8.2.

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

Консоль
Выполнить
  1. SELECT DISTINCT model, price
  2. FROM Laptop
  3. WHERE price > ALL (SELECT price
  4. FROM PC
  5. );

model Price
1298 1050
1750 1200
1752 1150

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

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


Рекомендуемые упражнения: 17, 24, 51, 67, 68, 74, 79, 127


Bookmark and Share
Развернуть всё
Свернуть всё

Содержание:

Тэги:
ALL AND AUTO_INCREMENT AVG battles CASE CAST CHAR CHARINDEX CHECK classes COALESCE CONSTRAINT Convert COUNT CROSS APPLY CTE DATEADD DATEDIFF DATENAME DATEPART DATETIME DDL DEFAULT DELETE DISTINCT DML EXCEPT EXISTS EXTRACT FOREIGN KEY FROM FULL JOIN GROUP BY Guadalcanal HAVING IDENTITY IN INNER JOIN insert INTERSECT IS NOT NULL IS NULL ISNULL laptop LEFT LEFT OUTER JOIN LEN maker MAX Больше тэгов
Учебник обновлялся
вчера
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.
Rambler's Top100