PostgreSQL - klauzula UNIONS

PostgreSQL UNION klauzula / operator służy do łączenia wyników dwóch lub więcej instrukcji SELECT bez zwracania zduplikowanych wierszy.

Aby użyć UNION, każdy SELECT musi mieć tę samą liczbę wybranych kolumn, taką samą liczbę wyrażeń kolumnowych, ten sam typ danych i mieć je w tej samej kolejności, ale nie muszą mieć tej samej długości.

Składnia

Podstawowa składnia UNION wygląda następująco -

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

UNION

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

Tutaj podanym warunkiem może być dowolne wyrażenie oparte na twoim wymaganiu.

Przykład

Rozważ dwie poniższe tabele: (a) Tabela COMPANY przedstawia się następująco -

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

(b) Kolejna tabela to DEPARTMENT, jak następuje -

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

Teraz połączmy te dwie tabele za pomocą instrukcji SELECT wraz z klauzulą ​​UNION w następujący sposób -

testdb=# 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;

Dałoby to następujący wynik -

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)

Klauzula UNION ALL

Operator UNION ALL służy do łączenia wyników dwóch instrukcji SELECT, w tym zduplikowanych wierszy. Te same zasady, które mają zastosowanie do UNION, dotyczą również operatora UNION ALL.

Składnia

Podstawowa składnia UNION ALL wygląda następująco -

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

UNION ALL

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

Tutaj podanym warunkiem może być dowolne wyrażenie oparte na twoim wymaganiu.

Przykład

Teraz połączmy wyżej wymienione dwie tabele w naszej instrukcji SELECT w następujący sposób -

testdb=# 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;

Dałoby to następujący wynik -

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)