Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практические SQL запросы на выборку.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
9.64 Mб
Скачать

Использование count вместо exists

Подчеркнем, что все формулировки с ANY и ALL могут быть в точности выполнены с EXISTS, в то время как наоборот будет неверно. Хотя в этом случае, также верно и то что EXISTS и NOT EXISTS подзапросы могут обманывать при выполнении тех же самых подзапросов с COUNT(*) в предложения SELECT подзапроса. Если больше чем ноль строк выводе будет подсчитано, это эквивалентно EXISTS; в противном случае это работает также как NOT EXISTS. Следующее является этому примером (вывод показывается в Рисунке 17 ):

SELECT *

FROM Customers outers

WHERE NOT EXISTS

( SELECT *

FROM Customers inners

WHERE outers.rating<=inners.rating

AND inners.city = 'Rome' );

cnum

cname

city

rating

snum

2004

Grass

Berlin

300

1002

2008

Cisneros

San Jose

300

1007

Рисунок 17 Использование EXISTS с соотнесенным подзапросом

Это должно также быть выполнено как

SELECT *

FROM Customers outers

WHERE 1 >

( SELECT COUNT (*)

FROM Customers inners

WHERE outers.rating<=inners.rating

AND inners.city = 'Rome' );

Вывод к этому запросу показывается в Рисунке 18. Теперь Вы начинаете понимать сколько способов имеется в SQL. Если это все кажется несколько путанным на этой стадии, нет причины волноваться. Вы обучаетесь чтобы использовать ту технику которая лучше всего отвечает вашим требованиям и наиболее понятна для вас. Начиная с этого места, мы хотим показать Вам большое количество возможностей, что бы вы могли найти ваш собственный стиль.

cnum

cname

city

rating

snum

2004

Grass

Berlin

300

1002

2008

Cisneros

San Jose

300

1007

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

Использование предложения union Объединение многочисленных запросов в один

Вы можете поместить многочисленные запросы вместе и объединить их вывод используя предложение UNION. Предложение UNION объединяет вывод двух или более SQL запросов в единый набор строк и столбцов. Например чтобы получить всех продавцов и заказчиков размещенных в Лондоне и вывести их как единое целое вы могли бы ввести:

SELECT snum, sname FROM Salespeople WHERE city = 'London'

UNION

SELECT cnum, cname FROM Customers WHERE city = 'London';

и получить вывод показанный в Рисунке 19.

Как вы можете видеть, столбцы выбранные двумя командами выведены так как если она была одна. Заголовки столбца исключены, потому что ни один из столбцов выведенных объединением, не был извлечен непосредственно из только одной таблицы. Следовательно все эти столбцы вывода не имеют никаких имен ( смотрите Главу 7 обсуждающую вывод столбцов ).

Кроме того обратите внимание, что только последний запрос заканчивается точкой с запятой. Отсутствие точки с запятой дает понять SQL , что имеется еще одно или более запросов.

1001

Peel

1004

Motika

2001

Hoffman

2006

Climens

Рисунок 19 Формирование объединения из двух запросов