PostgreSQL - Clausola UNIONS

Il PostgreSQL UNION la clausola / operatore viene utilizzata per combinare i risultati di due o più istruzioni SELECT senza restituire righe duplicate.

Per utilizzare UNION, ogni SELECT deve avere lo stesso numero di colonne selezionate, lo stesso numero di espressioni di colonna, lo stesso tipo di dati e averli nello stesso ordine ma non devono essere della stessa lunghezza.

Sintassi

La sintassi di base di UNION è il seguente -

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

UNION

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

In questo caso, una determinata condizione potrebbe essere una determinata espressione in base alle proprie esigenze.

Esempio

Considera le seguenti due tabelle, (a) la tabella AZIENDA è la seguente:

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) Un'altra tabella è DEPARTMENT come segue:

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)

Ora uniamo queste due tabelle usando l'istruzione SELECT insieme alla clausola UNION come segue:

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;

Ciò produrrebbe il seguente risultato:

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)

La clausola UNION ALL

L'operatore UNION ALL viene utilizzato per combinare i risultati di due istruzioni SELECT comprese le righe duplicate. Le stesse regole che si applicano a UNION si applicano anche all'operatore UNION ALL.

Sintassi

La sintassi di base di UNION ALL è il seguente -

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

UNION ALL

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

In questo caso, una determinata condizione potrebbe essere una determinata espressione in base alle proprie esigenze.

Esempio

Ora, uniamo le due tabelle sopra menzionate nella nostra istruzione SELECT come segue:

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;

Ciò produrrebbe il seguente risultato:

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)