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)