lunes, 26 de septiembre de 2011

Operadores INTERSECT, EXCEPT y UNION


INTERSECT, EXCEPT y UNION  son un set de operadores que ejecutan operaciones entre 2 o más set de datos.   UNION ha estado disponible en T-SQL desde las primeras versiones,  mientras INTERSECT y EXCEPT fueron introducidos en SQL 2005.     Los tres operadores tienen requerimientos similares:
1.       Requieren un mínimo de 2 set de datos.
2.       Cada set de datos debe tener el mismo número de columnas.
3.       Cada columna con su relativa columna deben ser tipos de datos compatibles.
4.       La cláusula ORDER BY puede usarse únicamente al final de la consulta.

UNION

Combina los resultados de dos o más consultas en un solo conjunto de resultados que incluye todas las filas que pertenecen a las consultas de la unión.

SELECT A, B,FROM TABLA1
UNION
SELECT A, B,FROM TABLA2
Una variante es UNION ALL  que agrega todas las filas a los resultados. Incluye las filas duplicadas. Si no se especifica, las filas duplicadas se quitan.
SELECT A, B,FROM TABLA1
UNION ALL
SELECT A, B,FROM TABLA2



INTERSECT

Devuelve los valores distintos de la consulta inicial que corresponda con la siguiente consulta.  Es decir los valores en común que tengan ambas consultas.
SELECT A, B,FROM TABLA1
INTERSECT
SELECT A, B,FROM TABLA2

EXCEPT
Devuelve los valores distintos de la consulta inicial que no se devuelven desde la consulta siguiente.   Es decir en dependencia de la ubicación de la consulta nos regresara los valores que no se encuentren la siguiente.
SELECT * FROM t1
EXCEPT
SELECT * FROM t2
Sera distinto los resultados para la siguiente consulta:
SELECT * FROM t2
EXCEPT
SELECT * FROM t1

DIFERENCIA SIMETRICA
Como lograriamos esta consulta?

Pudiésemos usar NOT IN para ello
SELECT A
     FROM Tabla1
     WHERE A NOT IN(SELECT A FROM Tabla2)
     UNION
     SELECT A
     FROM Tabla2
     WHERE A NOT IN(SELECT A FROM Tabla1)

O bien lo hariamos con la combinacion de los operadores antes vistos:

 SELECT A FROM TABLA1
     UNION
 SELECT A FROM TABLA2
     EXCEPT
 SELECT A FROM TABLA1
     INTERSECT
 SELECT A FROM TABLA2

1 comentario:

  1. Que diferencia hay entre UNION y diferencia simétrica, creo que hay algo erróneo

    ResponderEliminar