English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

PostgreSQL UNION Operator

The PostgreSQL UNION operator merges the results of two or more SELECT statements.

The UNION operator is used to merge the result sets of two or more SELECT statements.

Please note that each SELECT statement within UNION must have the same number of columns. The columns must also have similar data types. In addition, the order of the columns in each SELECT statement must be the same.

Syntax

The basic syntax of UNION is as follows:

SELECT column1 , [column2 ]
FROM table1 , [table2 ]
[WHERE condition]
UNION
SELECT column1 , [column2 ]
FROM table1 , [table2 ]
[WHERE condition]

The conditional statement here can be set to any expression as per your requirement.

Online Example

Create COMPANY table (Download COMPANY SQL file ),data content is as follows:

w3codeboxdb# 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)

Create DEPARTMENT table (Download DEPARTMENT SQL file ),data content is as follows:

w3codeboxdb=# 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)

Now, we use the UNION clause in the SELECT statement to connect the two tables as shown below:

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;

The results are as follows:

 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 clause

The UNION ALL operator can connect two SELECT statements with duplicate rows, usually the UNION operator selects different values. If duplicate values are allowed, please use UNION ALL.

Syntax

The syntax of UNION ALL clause is as follows:

SELECT column1 , [column2 ]
FROM table1 , [table2 ]
[WHERE condition]
UNION ALL
SELECT column1 , [column2 ]
FROM table1 , [table2 ]
[WHERE condition]

The conditional statement here can be set to any expression as per your requirement.

Online Example

Now, let's combine the two tables mentioned above using the SELECT statement with the UNION ALL clause:

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;

The results are as follows:

 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)