Как применять операторы SQL INTERSECT и EXCEPT для пересечения и разности результатов запросов
Назад<<< | Содержание | Вперёд>>> |
Операции пересечения и разности множеств в SQL
Оператор SQL INTERSECT реализует операцию реляционной алгебры пересечение множеств, оператор SQL EXCEPT - разность множеств. В виде множеств выступают результаты единичных запросов.
Таким образом, оператор SQL INTERSECT возвращает те и только те строки, которые возвращает и первый, и второй запросы. В свою очередь, оператор SQL EXCEPT возвращает те строки, которые возвращает первый запрос, и которых нет среди строк, возвращаемых вторым запросом.
Для того, чтобы были осуществлены операции пересечения и разности, запросы должны быть совместимы по объединению, то есть должны совпадать число столбцов, порядок их следования и их имена.
Оператор INTERSECT имеет следующий синтаксис:
Оператор EXCEPT имеет следующий синтаксис:
В этой конструкции единичные запросы могут иметь условия в секции WHERE, а могут не иметь их. При помощи операторов INTERSECT и EXCEPT можно производить операции с запросами как к одной таблице, так и к разным.
В примерах работаем с базой данных сети магазинов и таблицами SOLNYSHKO и VETEROK, содержащими данные о продуктах, которые имеются в магазинах с соответствующими названиями. Таблица SOLNYSHKO:
Prod_ID | ProdName | Maker | Quantity |
1 | хлеб | AB | 100 |
2 | молоко | CD | 65 |
3 | мясо | EF | 75 |
4 | рыба | GH | 60 |
5 | сахар | IJ | 45 |
Таблица VETEROK:
Prod_ID | ProdName | Maker | Quantity |
1 | хлеб | QW | 85 |
2 | молоко | LD | 70 |
3 | сыр | MV | 45 |
4 | масло | DG | 62 |
5 | рыба | LN | 55 |
Пересечение множеств: оператор SQL INTERSECT и его альтернативы
Пересечением множеств A и B называется множество, состоящее их всех тех или только тех элементов, которые принадлежат каждому из множеств A и B. Больше об операциях над множествами как над математическими объектами можно узнать из урока Множества и операции над множествами. Пересечениями множеств могут служить носители одних и тех же имен в двух студенческих группах, овощи одних и тех же наименований в двух корзинах и другие. Пересечением множеств является, наконец, набор товаров, которые имеются и в одном, и в другом магазинах.
Если вы хотите выполнить запросы к базе данных из этого урока на MS SQL Server, но эта СУБД не установлена на вашем компьютере, то ее можно установить, пользуясь инструкцией по этой ссылке.
Скрипт для создания базы данных магазинов, её таблиц и заполения таблиц данными - в файле по этой ссылке.
Пример 1. Вывести список продуктов, которые имеются и в мазазине Solnyshko, и в магазине Veterok. Пишем следующий запрос с использованием оператора SQL INTERSECT:
Результатом выполнения запроса будет следующая таблица:
ProdName |
хлеб |
молоко |
рыба |
Во многих диалектах SQL, например, MySQL, оператор INTERSECT отсутствует. Но реализация операции пересечения множеств возможна другими способами. Наиболее простой способ связан с использованием предиката EXISTS. В качестве альтернативы им можно пользоваться и в MS SQL Server.
Пример 2. Вывести список продуктов, которые имеются и в мазазине Solnyshko, и в магазине Veterok. Использовать предикат SQL EXISTS. Пишем следующий запрос:
Результатом выполнения запроса будет та же таблица, что и в примере 1:
ProdName |
хлеб |
молоко |
рыба |
Разность множеств: оператор SQL EXCEPT и его альтернативы
Разностью множеств A и B называется множество состоящее из всех тех и только тех элементов множества A, которые не являются элементами множества B. В частности, такое множество может состоять из продуктов, которые имеются в одном из магазинов, но отсутствуют в другом магазине.
Пример 3. Вывести список продуктов, которые имеются в мазазине Solnyshko, и отсутствуют в магазине Veterok. Пишем следующий запрос с использованием оператора SQL EXCEPT:
Результатом выполнения запроса будет следующая таблица:
ProdName |
мясо |
сахар |
Во многих диалектах SQL, например, MySQL, оператор EXCEPT отсутствует. Наиболее простой альтернативный способ реализации разности множеств связан с использованием предиката EXISTS с отрицанием NOT, то есть NOT EXISTS. В качестве альтернативы им можно пользоваться и в MS SQL Server.
Пример 4. Вывести список продуктов, которые имеются в мазазине SOLNYSHKO, и отсутствуют в магазине VETEROK. Использовать предикат SQL NOT EXISTS. Пишем следующий запрос:
Результатом выполнения запроса будет та же таблица, что и в примере 2:
ProdName |
мясо |
сахар |
Поделиться с друзьями
Назад<<< | Содержание | Вперёд>>> |