Базы данных
и язык SQL

Как применять операторы SQL INTERSECT и EXCEPT для пересечения и разности результатов запросов

Оглавление Связанные темы
Назад<<<ЛистатьВперёд>>>

Операции пересечения и разности множеств в SQL

Оператор SQL INTERSECT реализует операцию реляционной алгебры пересечение множеств, оператор SQL EXCEPT - разность множеств. В виде множеств выступают результаты единичных запросов.

Таким образом, оператор SQL INTERSECT возвращает те и только те строки, которые возвращает и первый, и второй запросы. В свою очередь, оператор SQL EXCEPT возвращает те строки, которые возвращает первый запрос, и которых нет среди строк, возвращаемых вторым запросом.

Для того, чтобы были осуществлены операции пересечения и разности, запросы должны быть совместимы по объединению, то есть должны совпадать число столбцов, порядок их следования и их имена.

Оператор INTERSECT имеет следующий синтаксис:

SELECT ИМЕНА_СТОЛБЦОВ (1..N) FROM ИМЯ_ТАБЛИЦЫ INTERSECT SELECT ИМЕНА_СТОЛБЦОВ (1..N) FROM ИМЯ_ТАБЛИЦЫ

Оператор EXCEPT имеет следующий синтаксис:

SELECT ИМЕНА_СТОЛБЦОВ (1..N) FROM ИМЯ_ТАБЛИЦЫ EXCEPT SELECT ИМЕНА_СТОЛБЦОВ (1..N) FROM ИМЯ_ТАБЛИЦЫ

В этой конструкции единичные запросы могут иметь условия в секции WHERE, а могут не иметь их. При помощи операторов INTERSECT и EXCEPT можно производить операции с запросами как к одной таблице, так и к разным.

В примерах работаем с базой данных сети магазинов и таблицами SOLNYSHKO и VETEROK, содержащими данные о продуктах, которые имеются в магазинах с соответствующими названиями. Таблица SOLNYSHKO:

Prod_IDProdNameMakerQuantity
1хлебAB100
2молокоCD65
3мясоEF75
4рыбаGH60
5сахарIJ45

Таблица VETEROK:

Prod_IDProdNameMakerQuantity
1хлебQW85
2молокоLD70
3сырMV45
4маслоDG62
5рыбаLN55

Пересечение множеств: оператор SQL INTERSECT и его альтернативы

Пересечением множеств A и B называется множество, состоящее их всех тех или только тех элементов, которые принадлежат каждому из множеств A и B. Больше об операциях над множествами как над математическими объектами можно узнать из урока Множества и операции над множествами. Пересечениями множеств могут служить носители одних и тех же имен в двух студенческих группах, овощи одних и тех же наименований в двух корзинах и другие. Пересечением множеств является, наконец, набор товаров, которые имеются и в одном, и в другом магазинах.

Если вы хотите выполнить запросы к базе данных из этого урока на MS SQL Server, но эта СУБД не установлена на вашем компьютере, то ее можно установить, пользуясь инструкцией по этой ссылке.

Скрипт для создания базы данных магазинов, её таблиц и заполения таблиц данными - в файле по этой ссылке.

Пример 1. Вывести список продуктов, которые имеются и в мазазине Solnyshko, и в магазине Veterok. Пишем следующий запрос с использованием оператора SQL INTERSECT:

SELECT ProdName FROM Solnyshko INTERSECT SELECT ProdName FROM Veterok

Результатом выполнения запроса будет следующая таблица:

ProdName
хлеб
молоко
рыба

Во многих диалектах SQL, например, MySQL, оператор INTERSECT отсутствует. Но реализация операции пересечения множеств возможна другими способами. Наиболее простой способ связан с использованием предиката EXISTS. В качестве альтернативы им можно пользоваться и в MS SQL Server.

Пример 2. Вывести список продуктов, которые имеются и в мазазине Solnyshko, и в магазине Veterok. Использовать предикат SQL EXISTS. Пишем следующий запрос:

SELECT ProdName FROM Solnyshko AS name_soln WHERE EXISTS (SELECT ProdName FROM VETEROK WHERE ProdName=name_soln.ProdName)

Результатом выполнения запроса будет та же таблица, что и в примере 1:

ProdName
хлеб
молоко
рыба

Разность множеств: оператор SQL EXCEPT и его альтернативы

Разностью множеств A и B называется множество состоящее из всех тех и только тех элементов множества A, которые не являются элементами множества B. В частности, такое множество может состоять из продуктов, которые имеются в одном из магазинов, но отсутствуют в другом магазине.

Пример 3. Вывести список продуктов, которые имеются в мазазине Solnyshko, и отсутствуют в магазине Veterok. Пишем следующий запрос с использованием оператора SQL EXCEPT:

SELECT ProdName FROM Solnyshko EXCEPT SELECT ProdName FROM Veterok

Результатом выполнения запроса будет следующая таблица:

ProdName
мясо
сахар

Во многих диалектах SQL, например, MySQL, оператор EXCEPT отсутствует. Наиболее простой альтернативный способ реализации разности множеств связан с использованием предиката EXISTS с отрицанием NOT, то есть NOT EXISTS. В качестве альтернативы им можно пользоваться и в MS SQL Server.

Пример 4. Вывести список продуктов, которые имеются в мазазине SOLNYSHKO, и отсутствуют в магазине VETEROK. Использовать предикат SQL NOT EXISTS. Пишем следующий запрос:

SELECT ProdName FROM Solnyshko AS name_soln WHERE NOT EXISTS (SELECT ProdName FROM Veterok WHERE ProdName=name_soln.ProdName)

Результатом выполнения запроса будет та же таблица, что и в примере 2:

ProdName
мясо
сахар

Поделиться с друзьями

Назад<<<ЛистатьВперёд>>>