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