Периодически требуется к результату выполнения запроса добавить или исключить строки, полученные другим запросом. Для решения подобных задач в стандарте SQL
предусмотрены операции над множествами:
UNION
- объединение строк (дополнение результатов первого запроса результатами второго запроса);INTERSECT
- пересечение строк (остаются строки, присутствующие в результатах обоих запросов);EXCEPT
- исключение строк (из строк первого запроса исключаются строки второго запроса).
Общий синтаксис запросов с операциями над множествами выглядит так
запрос_1
UNION или INTERSECT или EXCEPT
запрос_2
... sql
UNION или INTERSECT или EXCEPT
запрос_n
Все запросы должны удовлетворять следующим правилам:
- количество полей во всех запросах должно совпадать;
- типы данных соответствующих полей должны совпадать.
Название поля в результате выборки берется из первого запроса.
Рассмотрим на практике объединение UNION
.
Исходные данные
SELECT *
FROM table1
value |
---|
1 |
3 |
5 |
SELECT *
FROM table2
value |
---|
2 |
3 |
4 |
SELECT value
FROM table1
UNION
SELECT value
FROM table2
value |
---|
1 |
3 |
5 |
4 |
2 |
Обрати внимание, что в table1
и table2
есть строка со значением 3, но в результате объединения присутствует только одна строка, со значением 3. По умолчанию операции над множествами исключают дубликаты, как будто в запрос добавлен DISTINCT
.