Сейчас на сайте
Сейчас на сайте 0 пользователей и 0 гостей.

Специальный оператор ALL

С помощью ALL, предикат является верным, если каждое значение, выбранное подзапросом удовлетворяет условию в предикате внешнего запроса. Если мы хотим пересмотреть наш предыдущий пример, чтобы вывести только тех заказчиков, чьи оценки фактически выше, чем у каждого заказчика в Париже, мы можем ввести следующее чтобы произвести вывод, показанный в Рисунке 13.9:    

SELECT * FROM Customers WHERE rating > ALL (SELECT rating FROM Customers WHERE city = Rome ):

SQL Execution Log

SELECT *

FROM Customers

WHERE rating > ALL

(SELECT rating

FROM Customers

WHERE city = ' Rome ');

cnum cname city rating snum
2004 Grass Berlin 300 1002
2008 Cisneros San Jose 300 1007

Рисунок 13.9: Использование оператора ALL     Этот оператор проверяет значения оценки всех заказчиков в Риме. Затем он находит заказчиков с оценкой большей, чем у любого из заказчиков в Риме. Самая высокая оценка в Риме - у Giovanni( 200 ). Следователь- но, выбираются только значения выше этих 200. Как и в случае с ANY, мы можем использовать EXISTS для производства альтернативной формулировки такого же запроса - ( вывод показан на Ри- сунке 13.10 ):    

SELECT * FROM Customers outer WHERE NOT EXISTS ( SELECT * FROM Customers inner WHERE outer.rating < = inner.rating AND inner.city = |Rome|);  

SQL Execution Log

SELECT *

FROM Customers outer

WHERE NOT EXISTS

(SELECT *

FROM Customers inner

WHERE outer rating = inner.rating

AND inner.city = ' Rome ');

cnum cname city rating snum
2004 Grass Berlin 300 1002
2008 Cisneros San Jose 300 1007

Рисунок 13.10: Использование EXISTS в качестве альтернативы к ALL