2014/06/03

USANDO JOINs: INNER, RIGHT, LEFT, FULL, CROSS.

Hola, que tal, este nuevo post está inspirado en la duda que surgió de un amigo, explicaré los diferentes JOINS que podemos utilizar en SQL SERVER, primero ejecutaremos el siguiente script para tener algunos datos que utilizaremos:
IF OBJECT_ID(N'tempdb..#pruebaA') IS NOT NULL
    DROP TABLE #pruebaA

SELECT * INTO #pruebaA 
FROM ( VALUES(1,'uno'),(2,'dos'),(3,'tres'),(6,'seis'),(8,'ocho' ) ) AS A(numero,descripcion)

IF OBJECT_ID(N'tempdb..#pruebaB') IS NOT NULL
    DROP TABLE #pruebaB

SELECT * INTO #pruebaB 
FROM ( VALUES(2,'dos'),(4,'cuatro'),(5,'cinco' ),(6,'seis'),(7,'siete' ) ) AS B(numero,descripcion)


SELECT  * FROM #pruebaA
SELECT  * FROM #pruebaB
INNER

Devuelve las filas de las tablas involucradas solo cuando la condición de la cláusula ON se cumpla:
SELECT * FROM #pruebaA a
INNER JOIN #pruebaB b ON a.numero = b.numero
Que sucede si en la cláusula ON no se cumple condición alguna: 
SELECT * FROM #pruebaA a
INNER JOIN #pruebaB b ON 1=2

LEFT JOIN o LEFT OUTER JOIN

Devuelve todas las filas de la tabla del lado izquierdo de la cláusula LEFT y además las filas de la tabla de la derecha pero solo las que cumplan la condición, aquellas que no, se muestra NULL. 
SELECT * FROM #pruebaA a
LEFT JOIN #pruebaB b ON a.numero = b.numero
SELECT * FROM #pruebaA a
LEFT JOIN #pruebaB b ON a.numero = b.numero
AND a.numero<5
SELECT * FROM #pruebaA a
LEFT JOIN #pruebaB b ON a.numero = b.numero
AND b.numero>5
Que sucede si en la cláusula ON no se cumple condición alguna: 
SELECT * FROM #pruebaA a
LEFT JOIN #pruebaB b ON 1=2

RIGHT JOIN o RIGHT OUTER JOIN

Ahora es lo opuesto a LEFT, devuelve todas las filas de la tabla del lado derecho de la cláusula RIGHT y además las filas de la tabla de la izquierda pero solo las que cumplan la condición, aquellas que no, se muestra NULL. 
SELECT * FROM #pruebaA a
RIGHT JOIN #pruebaB b ON a.numero = b.numero
SELECT * FROM #pruebaA a
RIGHT JOIN #pruebaB b ON a.numero = b.numero
AND a.numero<5
SELECT * FROM #pruebaA a
RIGHT JOIN #pruebaB b ON a.numero = b.numero
AND b.numero>5
Que sucede si en la cláusula ON no se cumple condición alguna: 
SELECT * FROM #pruebaA a
RIGHT JOIN #pruebaB b ON 1=2

FULL JOIN o FULL OUTER JOIN

Muestras todas las filas de ambas tablas, es la combinación de LEFT JOIN y RIGHT JOIN.
SELECT * FROM #pruebaA a
FULL JOIN #pruebaB b ON a.numero = b.numero
SELECT * FROM #pruebaA a
FULL JOIN #pruebaB b ON a.numero = b.numero
AND a.numero<5
SELECT * FROM #pruebaA a
FULL JOIN #pruebaB b ON a.numero = b.numero
AND b.numero>5
Que sucede si en la cláusula ON no se cumple condición alguna: 
SELECT * FROM #pruebaA a
FULL JOIN #pruebaB b ON 1=2

CROSS JOIN

Devuelve las filas de la tabla A multiplicadas por las filas de la tabla B o lo que se conoce como PRODUCTO CARTESIANO. No requiere de una cláusula ON.
SELECT * FROM #pruebaA a
CROSS JOIN #pruebaB b
Espero que les sirva de ayuda.
SALUDOS!
COMPARTE ESTA INFORMACION SI TE PARECIO INTERESANTE

0 comentarios:

Publicar un comentario