Скачиваний:
25
Добавлен:
01.04.2014
Размер:
761.34 Кб
Скачать

158 Понимание sql

______________________________________________________________________

ГЛ. 13

========= СПЕЦИАЛЬНЫЙ ОПЕРАТОР 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

ИСПОЛЬЗОВАНИЕ ОПЕРАТОРОВ ANY, ALL, И SOME 159

______________________________________________________________________

Этот оператор проверяет значения оценки всех заказчиков в Риме. Затем

он находит заказчиков с оценкой большей чем у любого из заказчиков в

Риме. Самая высокая оценка в Риме - у 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

Соседние файлы в папке ПОНИМАНИЕ SQL