Периодически требуется к результату выполнения запроса добавить или исключить строки, полученные другим запросом. Для решения подобных задач в стандарте 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.