El operador UNION
permite combinar los resultados de dos o más sentencias SELECT
en un único resultado.
A continuación se ilustra la sintaxis del operador UNION
:
SELECT select_list
FROM A
UNION
SELECT select_list
FROM B;
En esta sintaxis, las consultas deben ajustarse a las siguientes reglas:
- El número y el orden de las columnas de la lista de selección de ambas consultas deben ser los mismos.
- Los tipos de datos de las columnas de las listas de selección deben ser compatibles.
El operador UNION
elimina todas las filas duplicadas del conjunto de datos combinado. Para conservar las filas duplicadas, utilice en su lugar el operador UNION ALL
.
Esta es la sintaxis del operador UNION ALL
:
SELECT select_list
FROM A
UNION ALL
SELECT select_list
FROM B;
El siguiente diagrama de Venn ilustra el funcionamiento de la "Unión":
UNION con cláusula ORDER BY¶
Los operadores UNION
y UNION ALL
pueden ordenar las filas del conjunto de resultados final en un orden no especificado. Por ejemplo, puede colocar filas del segundo conjunto de resultados antes/después de la fila del primer conjunto de resultados.
Para ordenar las filas del conjunto de resultados final, especifique la cláusula ORDER BY
después de la segunda consulta:
SELECT select_list
FROM A
UNION
SELECT select_list
FROM B
ORDER BY sort_expression;
Tenga en cuenta que si utiliza la cláusula ORDER BY
en la primera consulta, PostgreSQL emitirá un error.
Creación de tablas de ejemplo¶
Las siguientes sentencias crean dos tablas: top_rated_films
y most_popular_films
, e insertan datos en estas tablas:
CREATE TABLE top_rated_films(
title VARCHAR NOT NULL,
release_year SMALLINT
);
CREATE TABLE most_popular_films(
title VARCHAR NOT NULL,
release_year SMALLINT
);
INSERT INTO top_rated_films(title, release_year)
VALUES
('The Shawshank Redemption', 1994),
('The Godfather', 1972),
('The Dark Knight', 2008),
('12 Angry Men', 1957);
INSERT INTO most_popular_films(title, release_year)
VALUES
('An American Pickle', 2020),
('The Godfather', 1972),
('The Dark Knight', 2008),
('Greyhound', 2020);
La siguiente sentencia recupera datos de la tabla top_rated_films
:
SELECT * FROM top_rated_films;
Salida:
title | release_year
--------------------------+--------------
The Shawshank Redemption | 1994
The Godfather | 1972
The Dark Knight | 2008
12 Angry Men | 1957
(4 rows)
La siguiente sentencia recupera datos de la tabla most_popular_films
:
SELECT * FROM most_popular_films;
Salida:
title | release_year
--------------------+--------------
An American Pickle | 2020
The Godfather | 1972
The Dark Knight | 2008
Greyhound | 2020
(4 rows)
Ejemplos de UNION¶
Veamos algunos ejemplos de uso del operador UNION
de PostgreSQL.
Ejemplo simple de UNION¶
La siguiente sentencia utiliza el operador UNION
para combinar los datos de las consultas que recuperan datos de top_rated_films
y most_popular_films
:
SELECT * FROM top_rated_films
UNION
SELECT * FROM most_popular_films;
Salida:
title | release_year
--------------------------+--------------
An American Pickle | 2020
The Dark Knight | 2008
Greyhound | 2020
The Shawshank Redemption | 1994
The Godfather | 1972
12 Angry Men | 1957
(6 rows)
El conjunto de resultados incluye seis filas porque el operador UNION
elimina dos filas duplicadas.
Ejemplo de UNION ALL¶
La siguiente sentencia utiliza el operador UNION ALL
para combinar los conjuntos de resultados de las consultas que recuperan datos de las tablas top_rated_films
y most_popular_films
:
SELECT * FROM top_rated_films
UNION ALL
SELECT * FROM most_popular_films;
Salida:
title | release_year
--------------------------+--------------
The Shawshank Redemption | 1994
The Godfather | 1972
The Dark Knight | 2008
12 Angry Men | 1957
An American Pickle | 2020
The Godfather | 1972
The Dark Knight | 2008
Greyhound | 2020
(8 rows)
La salida indica que el operador UNION ALL
retiene las filas duplicadas.
Ejemplo de PostgreSQL UNION ALL con cláusula ORDER BY¶
Para ordenar el resultado devuelto por el operador UNION
, coloque la cláusula ORDER BY
después de la segunda consulta:
SELECT * FROM top_rated_films
UNION ALL
SELECT * FROM most_popular_films
ORDER BY title;
Salida:
title | release_year
--------------------------+--------------
12 Angry Men | 1957
An American Pickle | 2020
Greyhound | 2020
The Dark Knight | 2008
The Dark Knight | 2008
The Godfather | 1972
The Godfather | 1972
The Shawshank Redemption | 1994
(8 rows)
Resumen¶
- Utilice
UNION
para combinar conjuntos de resultados de dos consultas y devolver filas distintas. - Utilice
UNION ALL
para combinar los conjuntos de resultados de dos consultas pero conservar las filas duplicadas.