Saltar a contenido

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":

img

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.