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.
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 operadorINTERSECT
.