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

Использование 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 ' );

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.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. Если это все кажется несколько путанным на этой стадии, нет причины волноваться. Вы обучаетесь, чтобы использовать ту технику которая лучше всего отвечает вашим требованиям и наиболее понятна для вас. Начиная с этого места, мы хотим показать Вам большое количество возможностей, что бы вы могли найти ваш собственный стиль.

SQL Execution Log

SELECT *

FROM Customers outer

WHERE 1 > (SELECT COUNT (*) |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.13: Использование COUNT вместо EXISTS