PostgreSQL - Cláusula UNIONS
O PostgreSQL UNION cláusula / operador é usado para combinar os resultados de duas ou mais instruções SELECT sem retornar nenhuma linha duplicada.
Para usar UNION, cada SELECT deve ter o mesmo número de colunas selecionadas, o mesmo número de expressões de coluna, o mesmo tipo de dados e tê-los na mesma ordem, mas não precisam ter o mesmo comprimento.
Sintaxe
A sintaxe básica de UNION é o seguinte -
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]
UNION
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]
Aqui, determinada condição pode ser qualquer expressão com base em seus requisitos.
Exemplo
Considere as duas tabelas a seguir, (a) a tabela COMPANY é a seguinte -
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) Outra tabela é DEPARTAMENTO da seguinte forma -
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)
Agora vamos juntar essas duas tabelas usando a instrução SELECT junto com a cláusula UNION da seguinte maneira -
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;
Isso produziria o seguinte resultado -
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)
A cláusula UNION ALL
O operador UNION ALL é usado para combinar os resultados de duas instruções SELECT incluindo linhas duplicadas. As mesmas regras que se aplicam ao UNION também se aplicam ao operador UNION ALL.
Sintaxe
A sintaxe básica de UNION ALL é o seguinte -
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]
UNION ALL
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]
Aqui, determinada condição pode ser qualquer expressão com base em seus requisitos.
Exemplo
Agora, vamos juntar as duas tabelas mencionadas acima em nossa instrução SELECT da seguinte maneira -
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;
Isso produziria o seguinte resultado -
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)