Realizar semicombinaciones con EXCEPT e INTERSECT
Los operadores EXCEPT e INTERSECT permiten comparar los resultados de dos o más instrucciones SELECT y devolver valores distintos. El operador EXCEPT devuelve los valores distintos de la consulta incluida en la parte izquierda del operador EXCEPT, que además no son devueltos por la consulta de la parte derecha. INTERSECT devuelve los valores distintos que devuelven tanto la consulta de la parte izquierda como la consulta de la parte derecha del operador INTERSECT. Los conjuntos de resultados que se comparan con EXCEPT o INTERSECT deben tener la misma estructura. Deben tener el mismo número de columnas y las columnas del conjunto de resultados deben tener tipos de datos compatibles. Para obtener más información, vea EXCEPT e INTERSECT (Transact-SQL).
Supongamos que utilizamos las tablas TableA, TableB y TableC con los siguientes datos en sus columnas intcol1 respectivas.
TableA (col1 int) | TableB (col1 int) | TableC (col1 int) |
---|---|---|
NULL |
NULL |
2 |
NULL |
1 |
2 |
NULL |
3 |
2 |
1 |
4 |
4 |
2 |
4 |
4 |
2 |
||
2 |
||
3 |
||
4 |
||
4 |
Si se utiliza EXCEPT, la consulta siguiente devuelve los valores distintos de la consulta situada a la izquierda del operando EXCEPT, que además no existen en la consulta de la derecha.
SELECT * FROM TableA EXCEPT SELECT * FROM TableB
Estos son los resultados:
Col1
-----------
2
(1 row(s) affected)
Si se utiliza INTERSECT, esta consulta devuelve los valores distintos que devuelven tanto la consulta de la parte izquierda como la consulta de la parte derecha del operador INTERSECT.
SELECT * FROM TableA INTERSECT SELECT * FROM TableB
Estos son los resultados:
Col1
-----------
NULL
1
3
4
(4 row(s) affected)
El operador INTERSECT tiene prioridad sobre EXCEPT. Por ejemplo, en la siguiente consulta se utilizan los dos operadores:
SELECT * FROM TableA EXCEPT SELECT * FROM TableB INTERSECT SELECT * FROM TableC
Estos son los resultados:
Col1
-----------
NULL
1
2
3
(4 row(s) affected)
Vea también
Conceptos
Usar UNION, EXCEPT e INTERSECT con otras instrucciones Transact-SQL