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
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
SALUDOS!
No hay comentarios.:
Publicar un comentario