2014/01/24

SET OPERATORS: UNION, UNION ALL, EXCEPT, INTERSECT

Buen día, existen algunas funciones en SQL SERVER 2012 como EXCEPT o INTERSECT que no son muy conocidas o al menos no muy utilizadas, tal vez la más conocida dentro de este conjunto de funciones es UNION y UNION ALL, trataré de explicarles un poco más su funcionamiento.

Utilizaré el siguiente script para explicar las funciones:
CREATE TABLE #ventas2011 ( nombre VARCHAR(10) , cantidad INT )
CREATE TABLE #ventas2012 ( nombre VARCHAR(10) , cantidad INT )

INSERT INTO #ventas2011
VALUES( 'ROBERTO' , 130 ) , ( 'DIANE' , 21 ) , ( 'MICHAEL' , 90 )

INSERT INTO #ventas2012
VALUES( 'ROBERTO' , 131 ) , ( 'DIANE' , 21 ) , ( 'JANICE' , 90 ), ( 'DAVID' , 50 )

SELECT * FROM #ventas2011
SELECT * FROM #ventas2012


UNION

Devuelve la combinación de ambas consultas en un solo resultado, con la restricción que ambas consultas deben contener la misma cantidad de columnas y los tipos de datos de cada una de ellas debe ser el mismo o similar a manera que se pueda hacer una conversión implícita.

Ejecutando el siguiente query obtenemos:
SELECT * FROM #ventas2011
UNION
SELECT * FROM #ventas2012


Si los valores de las columnas son los mismos en ambas consultas, solo devuelve una sola fila como lo hace en la imagen anterior para el resultado de DIANE 21 no así para los valores de ROBERTO ya que en la columna cantidad contiene diferentes valores.

Si aplicamos UNION ALL, nos traerá todos los resultados de las consultas implicadas.
SELECT * FROM #ventas2011
UNION ALL
SELECT * FROM #ventas2012


INTERSECT

Es muy similar al INNER JOIN, con la diferencia que la comparación lo hace por todas las columnas implicadas en las consultas:
SELECT * FROM #ventas2011
INTERSECT
SELECT * FROM #ventas2012

EXCEPT

Muestra únicamente aquellas filas de la consulta de la izquierda de la clausula EXCEPT que no aparezcan en la consulta de la derecha.
SELECT * FROM #ventas2011
EXCEPT
SELECT * FROM #ventas2012

Si invertimos el orden de aparición de las tablas, observemos el resultado:
Lo importante es conocerlas porque tal vez nos puedan sacar de un apuro en alguna ocasión sin tener que hacer un query complicado.

SALUDOS! 
COMPARTE ESTA INFORMACION SI TE PARECIO INTERESANTE

0 comentarios:

Publicar un comentario