PostgreSQL - Cláusula UNIONS
El PostgreSQL UNION La cláusula / operador se utiliza para combinar los resultados de dos o más sentencias SELECT sin devolver filas duplicadas.
Para usar UNION, cada SELECT debe tener el mismo número de columnas seleccionadas, el mismo número de expresiones de columna, el mismo tipo de datos y tenerlas en el mismo orden, pero no es necesario que tengan la misma longitud.
Sintaxis
La sintaxis básica de UNION es como sigue -
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]
UNION
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]
Aquí, la condición dada podría ser cualquier expresión dada según su requisito.
Ejemplo
Considere las siguientes dos tablas, (a) La tabla EMPRESA es la siguiente:
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) Otra tabla es DEPARTAMENTO de la siguiente manera:
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)
Ahora unamos estas dos tablas usando la instrucción SELECT junto con la cláusula UNION de la siguiente manera:
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;
Esto produciría el siguiente 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)
La cláusula UNION ALL
El operador UNION ALL se utiliza para combinar los resultados de dos sentencias SELECT, incluidas las filas duplicadas. Las mismas reglas que se aplican a UNION se aplican también al operador UNION ALL.
Sintaxis
La sintaxis básica de UNION ALL es como sigue -
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]
UNION ALL
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]
Aquí, la condición dada podría ser cualquier expresión dada según su requisito.
Ejemplo
Ahora, unamos las dos tablas mencionadas anteriormente en nuestra declaración SELECT de la siguiente manera:
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;
Esto produciría el siguiente 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)