Специальный оператор 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  
 
 

‹ Как ANY может стать неоднозначным
Вверх
Равенства и неравенства ›

Айтистанция
Добавить комментарий

Adblock
detector