ИСПОЛЬЗОВАНИЕ COUNT ВМЕСТО EXISTS

Подчеркнем, что все формулировки с ANY и ALL могут быть в точности выполнены с EXISTS, в то время как наоборот будет неверно. Хотя в этом случае, также верно и то что EXISTS и NOT EXISTS подзапросы могут обманывать при выполнении тех же самых подзапросов с COUNT(*) в предложения SELECT подзапроса. Если больше чем ноль строк выводе будет подсчитано, это эквивалентно EXISTS; в противном случае это работает также как NOT EXISTS. Следующее является этому примером (вывод показывается в Рисунке 13.12 ):
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.12: Использование EXISTS с соотнесенным подзапросом

Это должно также быть выполнено как SELECT * FROM Customers outer WHERE 1 > ( SELECT COUNT (*) FROM Customers inner WHERE outer.rating < = inner.rating AND inner.city = 'Rome' );
Вывод к этому запросу показывается в Рисунке 13.13. Теперь Вы начинаете понимать сколько способов имеется в SQL. Если это все кажется несколько путанным на этой стадии, нет причины волноваться. Вы обучаетесь чтобы использовать ту технику которая лучше всего отвечает вашим требованиям и наиболее понятна для вас. Начиная с этого места, мы хотим показать Вам большое количество возможностей, что бы вы могли найти ваш собственный стиль.

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


Рисунок 13.13: Использование COUNT вместо EXISTS