Оператор UNION в PostgreSQL
Оператор UNION в PostgreSQL объединяет результаты двух или более операторов SELECT.
Оператор UNION используется для объединения результирующих наборов двух или более операторов SELECT.
Обратите внимание, что каждый оператор SELECT в UNION должен иметь одинаковое количество столбцов. Столбцы также должны иметь схожие типы данных. Кроме того, порядок столбцов в каждом операторе SELECT должен быть одинаковым.
Синтаксис
Базовый синтаксис UNION выглядит следующим образом:
SELECT column1 [, column2 ] FROM table1 [, table2 ] [WHERE condition] UNION SELECT column1 [, column2 ] FROM table1 [, table2 ] [WHERE condition]
Здесь условие можно задать любым выражением в соответствии с вашими потребностями.
Пример
Создайте таблицу COMPANY (Скачать SQL-файл COMPANY), содержимое данных следующее:
exampledb# select * from COMPANY; id | name | age | address | salary ----+-------+-----+-----------+-------- 1 | Paul | 32 | California| 20000 2 | Allen | 25 | Texas | 15000 3 | Teddy | 23 | Norway | 20000 4 | Mark | 25 | Rich-Mond | 65000 5 | David | 27 | Texas | 85000 6 | Kim | 22 | South-Hall| 45000 7 | James | 24 | Houston | 10000 (7 rows)
Создайте таблицу DEPARTMENT (Скачайте SQL-файл DEPARTMENT), с данными следующего содержания:
exampledb=# SELECT * from DEPARTMENT; id | dept | emp_id ----+-------------+-------- 1 | IT Billing | 1 2 | Engineering | 2 3 | Finance | 7 4 | Engineering | 3 5 | Finance | 4 6 | Engineering | 5 7 | Finance | 6 (7 rows)
Теперь давайте используем предложение UNION в операторе SELECT, чтобы объединить две таблицы, как показано ниже:
SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT
ON COMPANY.ID = DEPARTMENT.EMP_ID
UNION
SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT
ON COMPANY.ID = DEPARTMENT.EMP_ID;
Результат следующий:
emp_id | name | dept
--------+-------+--------------
5 | David | Engineering
6 | Kim | Finance
2 | Allen | Engineering
3 | Teddy | Engineering
4 | Mark | Finance
1 | Paul | IT Billing
7 | James | Finance
(7 rows)
Предложение UNION ALL
Оператор UNION ALL может объединять два оператора SELECT, содержащих дублирующиеся строки. По умолчанию оператор UNION выбирает только уникальные значения. Если дублирующиеся значения допустимы, используйте UNION ALL.
Синтаксис
Базовый синтаксис предложения UNION ALL выглядит следующим образом:
SELECT column1 [, column2 ] FROM table1 [, table2 ] [WHERE condition] UNION ALL SELECT column1 [, column2 ] FROM table1 [, table2 ] [WHERE condition]
Здесь условие можно задать любым выражением в соответствии с вашими потребностями.
Пример
Теперь давайте объединим две таблицы, упомянутые выше, с помощью оператора SELECT с предложением UNION ALL:
SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT
ON COMPANY.ID = DEPARTMENT.EMP_ID
UNION ALL
SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT
ON COMPANY.ID = DEPARTMENT.EMP_ID;
Результат следующий:
emp_id | name | dept
--------+-------+--------------
1 | Paul | IT Billing
2 | Allen | Engineering
7 | James | Finance
3 | Teddy | Engineering
4 | Mark | Finance
5 | David | Engineering
6 | Kim | Finance
1 | Paul | IT Billing
2 | Allen | Engineering
7 | James | Finance
3 | Teddy | Engineering
4 | Mark | Finance
5 | David | Engineering
6 | Kim | Finance
(14 rows)
Другие расширения