Compartir a través de


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

Ayuda e información

Obtener ayuda sobre SQL Server 2005