Шаг 12 - Использование операторов ANY, ALL

Рассмотрим новый способ нахождения агента с заказчиками размещенными в их городах:

SELECT *
FROM Salespeople
WHERE city = ANY (
    SELECT city
    FROM Customers
)
Результат:
SNUM  SNAME   CITY       COMM  
----- ------- ---------- ----- 
1001  Иванов  Москва     12
1003  Егоров  Караганда  10
Оператор ANY берет все значения, выведенные подзапросом, и оценивает их как верные, если любое из них равняется значению города в текущей строке внешнего запроса. Это означает, что подзапрос должен выбирать значения такого же типа как и те, которые сравниваются в основном условии.

В приведенном выше запросе можно было бы использовать оператор IN. Однако оператор ANY можно применять не только с оператором равенства. Например, можно найти всех агентов, у которых заказчики следуют им в алфавитном порядке: SELECT * FROM Salespeople WHERE sname < ANY ( SELECT cname FROM Customers ) Результат:

SNUM  SNAME    CITY       COMM
----- -------- ---------- -----
1001  Иванов   Москва     12
1002  Петров   Хабаровск  13
1003  Егоров   Караганда  10
1004  Сидоров  Сочи       11

Оператор ALL считает условие верным, если каждое значение, выбранное подзапросом, удовлетворяет условию внешнего запроса. Выберем тех заказчиков, чьи рейтинги выше чем у каждого заказчика в Москве:

SELECT *
FROM Customers
WHERE rating > ALL(
    SELECT rating
    FROM Customers
    WHERE city = 'Москва'
)
Результат:
CNUM  CNAME                             CITY       RATING  SNUM
----- --------------------------------- ---------- ------- -----
2002  AО Бендер и К                     Одесса     200     1003
2003  Фирма ХХХ                         Рязань     200     1002
2004  Концерн "Дети лейтенанта Шмидта"  Бобруйск   300     1002
2008  ОАО "Валют-транзит"               Караганда  300     1007

Вот собственно и все об операторах специфичных для SQL. Мы прошагали по простым запросам, изучили вложенные подзапросы. Осталось сделать еще один шаг - как объединить вывод произвольного количества запросов при помощи команды UNION.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Aidar Talibzhanov - 25.01.2000