Доступные операции над множествами

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

4.13 GROUPING SETS

5.2 Из какого запроса строка?