Галерея
7757 8119 8300 8698 8817 9504 9722 9937
Интересные записи
Топовые новости
Новое

Оператор intersect

Оператор intersectОператор INTERSECT, примененный к результирующим наборам данных двух запросов, позволяет получить только те записи, которые присутствуют в результатах обоих запросов. Этот оператор реализован во всех трех ведущих СУБД, представленных в настоящей книге. Рассмотрим запрос, отбирающий идентификаторы заказчиков (поле CUST_ID_N) из таблицы CUSTOMER базы данных ACME и сочетающий их с результатами второго запроса, возвращающим идентификаторы клиентов, которые размещали заказы. Тот же результат можно получить и другими способами. Ниже приведен пример, в котором используется подзапрос и оператор IN.

Несмотря на то что оператор INTERSECT можно заменить комбинацией других методов SQL, он позволяет сделать программный код более понятным. При комбинировании результатов нескольких запросов в единый результирующий набор данных иногда нужно исключить из результатов первого запроса строки, содержащиеся в результатах второго запроса. Для выполнения этой задачи в DB2 определено ключевое слово EXCEPT, а в Oracle — MINUS; Microsoft SQL Server распознает оба этих оператора. Функции этой операции в точности соответствуют теории множеств (см. приложение Л). Рассмотрим следующие два запроса, отбирающие некоторую информацию о заказчиках. Вот результаты первого запроса (все заказчики). Итак, операция возвращает 32 записи — пять записей, возвращенные вторым запросом, были исключены из результатов первого. Мы специально сократили результаты всех трех запросов, чтобы они поместились на странице, однако вы сами можете запустить запрос в своей СУБД и увидеть результаты в полном виде. В качестве альтернативы можно использовать оператор NOT EXISTS, однако, как ни странно, он не входит в стандарт SQL:2003, хотя и реализован во всех трех ведущих СУБД. Чтобы получить результаты с использованием оператора NOT EXISTS, следует использовать Коррелирующий подзапрос, который отличается от обычного тем, что содержит в критерии предложения WHERE параметр из внешнего запроса.

В приведенном примере для ограничения количества возвращаемых записей в критерии подзапроса был использован столбец CUST_ID_N таблицы CUSTOMER. Если запись с текущим идентификатором клиента (ORDHDR_CUSTID_FN=CUST. CUST_ID_N) присутствует в таблице ORDER_HEADER, она будет исключена из конечного результирующего набора данных запроса. Будут возвращены записи только тех клиентов, которые еще

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *