ИСПОЛЬЗОВАНИЕ 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