Saltar a contenido

Al igual que los operadores UNION y EXCEPT, el operador INTERSECT de PostgreSQL combina conjuntos de resultados de dos sentencias SELECT en un único conjunto de resultados. El operador INTERSECT devuelve un conjunto de resultados que contiene filas que están disponibles en ambos conjuntos de resultados.

Esta es la sintaxis básica del operador INTERSECT:

SELECT select_list
FROM A
INTERSECT
SELECT select_list
FROM B;

Para utilizar el operador INTERSECT, las columnas que aparecen en las sentencias SELECT deben seguir estas reglas:

  • El número de columnas y su orden en las consultas debe ser el mismo.
  • Los tipos de datos de las columnas en las consultas deben ser compatibles.

El siguiente diagrama ilustra cómo el operador INTERSECT combina los conjuntos de resultados A y B. El conjunto de resultados final está representado por el área amarilla donde el círculo A interseca al círculo B.

PostgreSQL INTERSECT Operator

INTERSECT con cláusula ORDER BY

Si desea ordenar el conjunto de resultados devuelto por el operador INTERSECT, coloque la cláusula ORDER BY después de la consulta final:

SELECT select_list
FROM A
INTERSECT
SELECT select_list
FROM B
ORDER BY sort_expression;

Creación de tablas de ejemplo

Crearemos dos tablas top_rated_films y most_popular_films para demostración:

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);

SELECT * FROM top_rated_films;
SELECT * FROM most_popular_films;

El contenido de la tabla top_rated_films:

          title           | release_year
--------------------------+--------------
 The Shawshank Redemption |         1994
 The Godfather            |         1972
 The Dark Knight          |         2008
 12 Angry Men             |         1957
(4 rows)

El contenido de la tabla most_popular_films:

       title        | release_year
--------------------+--------------
 An American Pickle |         2020
 The Godfather      |         1972
 The Dark Knight    |         2008
 Greyhound          |         2020
(4 rows)

Ejemplos del operador INTERSECT

Exploremos algunos ejemplos de uso del operador INTERSECT.

Ejemplo básico del operador INTERSECT

El siguiente ejemplo utiliza el operador INTERSECT para recuperar las películas populares que también son las mejor valoradas:

SELECT *
FROM most_popular_films 
INTERSECT
SELECT *
FROM top_rated_films;

Salida:

      title      | release_year
-----------------+--------------
 The Godfather   |         1972
 The Dark Knight |         2008
(2 rows)

El conjunto de resultados devuelve una película que aparece en ambas tablas.

Ejemplo de uso de INTERSECT con la cláusula ORDER BY

La siguiente sentencia utiliza el operador INTERSECT para encontrar las películas más populares que también son las más valoradas y ordena las películas por año de estreno:

SELECT *
FROM most_popular_films 
INTERSECT
SELECT *
FROM top_rated_films
ORDER BY release_year;

Salida:

      title      | release_year
-----------------+--------------
 The Godfather   |         1972
 The Dark Knight |         2008
(2 rows)

Resumen

  • Utilice el operador INTERSECT de PostgreSQL para combinar dos conjuntos de resultados y devolver un único conjunto de resultados que contenga las filas que aparecen en ambos conjuntos de resultados.
  • Coloque la cláusula ORDER BY después de la segunda consulta para ordenar las filas en el conjunto de resultados devuelto por el operador INTERSECT.