Al igual que los operadores UNION e INTERSECT, el operador EXCEPT
devuelve filas comparando los conjuntos de resultados de dos o más consultas.
El operador EXCEPT
devuelve filas distintas de la primera consulta (izquierda) que no están en la segunda consulta (derecha).
A continuación se ilustra la sintaxis del operador EXCEPT
.
SELECT select_list
FROM A
EXCEPT
SELECT select_list
FROM B;
Las consultas que implican el EXCEPT
tienen que seguir estas reglas:
- El número de columnas y su orden deben ser los mismos en las dos consultas.
- Los tipos de datos de las columnas respectivas deben ser compatibles.
El siguiente diagrama de Venn ilustra el operador EXCEPT
:
Si desea ordenar las filas de los conjuntos de resultados combinados, debe colocar la cláusula ORDER BY
después de la segunda consulta:
SELECT select_list
FROM A
EXCEPT
SELECT select_list
FROM B
ORDER BY sort_expression;
Creación de tablas de ejemplo¶
Crearemos las 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 EXCEPT de PostgreSQL¶
Veamos algunos ejemplos de uso del operador `EXCEPT
Ejemplo básico del operador EXCEPT¶
La siguiente sentencia utiliza el operador EXCEPT
para encontrar las películas mejor valoradas que no son populares:
SELECT * FROM top_rated_films
EXCEPT
SELECT * FROM most_popular_films;
Salida:
title | release_year
--------------------------+--------------
The Shawshank Redemption | 1994
12 Angry Men | 1957
(2 rows)
Uso del operador EXCEPT con la cláusula ORDER BY¶
La siguiente sentencia utiliza la cláusula ORDER BY
en la consulta para ordenar por títulos el conjunto de resultados devuelto por el operador EXCEPT
:
SELECT * FROM top_rated_films
EXCEPT
SELECT * FROM most_popular_films
ORDER BY title;
Salida:
title | release_year
--------------------------+--------------
12 Angry Men | 1957
The Shawshank Redemption | 1994
(2 rows)
Observe que hemos colocado la cláusula ORDER BY después de la segunda consulta para ordenar las películas por títulos.
Resumen¶
- Utilice el operador
EXCEPT
de PostgreSQL para combinar filas de dos conjuntos de resultados y devolver un conjunto de resultados que contenga filas del primer conjunto de resultados que no aparezcan en el segundo conjunto de resultados.