¿Qué hace el operador Except en SQL?

Resumen: en este tutorial aprenderás a usar el operador EXCEPT de SQL Server que encuentra la diferencia entre dos consultas y el resultado regresa las filas que pertenecen únicamente a la primera consulta.
¿Qué hace el operador Except en SQL?
A diferencia del operador INTERSECT, el operador EXCEPT de SQL Server compara los resultados de dos consultas y devuelve las filas de la primera consulta y siempre y cuando no se encuentren en la segunda consulta. En otras palabras, EXCEPT resta el conjunto de resultados de una consulta de otra.
Introducción al operador EXCEPT de SQL Server
A continuación, se muestra la sintaxis de SQL Server EXCEPTO:
query_1
EXCEPT
query_2
Las reglas para combinar los conjuntos de resultados de dos consultas en la sintaxis anterior son las siguientes:
- El número y orden de las columnas debe ser el mismo en ambas consultas.
- Los tipos de datos de las columnas correspondientes deben ser iguales o compatibles.
La siguiente imagen muestra la operación EXCEPT de los dos conjuntos de resultados T1 y T2:
En esta ilustración:
- El conjunto de resultados T1 incluye 1, 2 y 3.
- El conjunto de resultados T2 incluye 2, 3 y 4.
- El operador EXCEPT de T1 y T2 devuelve 1, que es la fila distinta del conjunto de resultados de T1 que no aparece en el conjunto de resultados de T2.
Ejemplos del operador EXCEPT de SQL Server
En los siguientes ejemplos aprenderás cómo usar el operador EXCEPT, consulta las siguientes tablas de productos y artículos de pedido de la base de datos de ejemplo:
A) Ejemplo del uso simple de EXCEPT
El siguiente ejemplo usa el operador EXCEPT para encontrar los productos que no tienen ventas:
SELECT product_id
FROM production.products
EXCEPT
SELECT product_id
FROM sales.order_items;
Resultado:
product_id |
---|
284 |
195 |
318 |
321 |
267 |
121 |
319 |
1 |
316 |
125 |
317 |
291 |
154 |
320 |
En este ejemplo, la primera consulta devuelve todos los productos. La segunda consulta devuelve los productos que tienen ventas. Por lo tanto, el conjunto de resultados incluye solo los productos que no tienen ventas.
B) Ejemplo del operador de EXCEPT con ORDER BY
Para ordenar el conjunto de resultados creado por el operador EXCEPT, debes agregar la cláusula ORDER BY en la última consulta. Por ejemplo, el siguiente ejemplo encuentra los productos que no tuvieron ventas y ordena los productos por su id en orden ascendente:
SELECT product_id
FROM production.products
EXCEPT
SELECT product_id
FROM sales.order_items
ORDER BY product_id;
Resultado:
product_id |
---|
1 |
121 |
125 |
154 |
195 |
267 |
284 |
291 |
316 |
317 |
318 |
319 |
320 |
321 |
En este post aprendiste a usar el operador EXCEPT de SQL Server que encuentra la diferencia entre dos consultas y el resultado regresa las filas que pertenecen únicamente a la primera consulta.