Операции над множествами

Несколько операций

В одном запросе может быть использовано несколько операций над множествами строк. Для этого достаточно перечислить их друг за другом.

Рассмотрим пример. Есть три таблицы:

SELECT *
  FROM table1
#value
11
22
SELECT *
  FROM table2
#value
13
24
SELECT *
  FROM table3
#value
11
23
35

Объединим строки трех таблиц

SELECT * FROM table1
 UNION
SELECT * FROM table2
 UNION
SELECT * FROM table3
 ORDER BY value
#value
11
22
33
44
55

В случае использования INTERSECT и EXCEPT становится важным порядок выполнения операций над множествами строк. По умолчанию запросы выполняются последовательно сверху вниз. В нашем примере сначала будут объединены строки table1 и table2, затем к ним будут добавлены строки table3.

Рассмотрим пример с EXCEPT.

SELECT * FROM table1
 UNION
SELECT * FROM table2
EXCEPT
SELECT * FROM table3
 ORDER BY value
#value
12
24

Сначала были объединены строки table1 и table2. В результате получились строки со значениями 1, 2, 3, 4. Затем из этих строк были исключены строки table3 1, 3 и 5.

Порядок выполнения операций можно изменить с помощью скобок. Сначала исключим из table2 строки table3, затем объединим результат со строками table1.

SELECT * FROM table1
 UNION
(
  SELECT * FROM table2
  EXCEPT
  SELECT * FROM table3
)
 ORDER BY value
#value
11
22
34

Из table2 (3, 4) исключаем строки table3 (1, 3, 5). В результате остается строка со значением 4. Затем к строкам  table1 (1, 2) добавляется строка со значением 4.

ПредыдущаяСледующая