
Объединение наборов записей
Нередко требуется объединить записи двух или более таблиц с похожими структурами в одну таблицу. Иначе говоря, к набору записей, возвращаемому одним запросом, требуется добавить записи, возвращаемые другим запросом.
Для этого служит оператор UNION (объединение):
3anpoc1 UNION Запрос2;
При этом в результатной таблице остаются только отличающиеся записи. Чтобы сохранить в ней все записи, после оператора UNION следует написать ключевое слово ALL.
К базе данных Sales сложно сформулировать осмысленный запрос с объединением, который бы имел какую-либо практическую ценность. Поэтому в качестве примера рассмотрим объединение результатов выполнения запросов, возвращающих просто константные значения.
Запрос: Объединение с исключением дублирующих строк
SELECT 1, 'Один'
UNION
SELECT 1, 'Один'
UNION
SELECT 2, 'Два'
Запрос: Объединение с сохранением дубликатов
SELECT 1, 'Один'
UNION ALL
SELECT 1, 'Один'
UNION ALL
SELECT 2, 'Два'
Пересечение наборов записей
Пересечение двух наборов записей осуществляется с помощью оператора INTERSECT (пересечение), возвращающего таблицу, записи в которой содержатся одновременно в двух наборах:
Запрос1 INTERSECT Запрос2;
(SELECT 1, 'Один'
UNION
SELECT 2, 'Два'
UNION
SELECT 3, 'Три')
INTERSECT
(SELECT 1, 'Один'
UNION
SELECT 2, 'Два'
UNION
SELECT 4, 'Четыре')
Разность наборов записей
Для получения записей, содержащихся в одном наборе и отсутствующих в другом, служит оператор EXCEPT(за исключением):
Запрос1 ЕХCЕРТ Запрос2;
(SELECT 1, 'Один'
UNION
SELECT 2, 'Два'
UNION
SELECT 3, 'Три')
EXCEPT
(SELECT 1, 'Один'
UNION
SELECT 2, 'Два'
UNION
SELECT 4, 'Четыре')