¿Cuál es la diferencia entre CROSS JOIN y FULL OUTER JOIN en SQL Server?
¿Son iguales o no? Por favor explique. ¿Cuándo se usaría alguno de estos?
fuente
¿Cuál es la diferencia entre CROSS JOIN y FULL OUTER JOIN en SQL Server?
¿Son iguales o no? Por favor explique. ¿Cuándo se usaría alguno de estos?
Una unión cruzada produce un producto cartesiano entre las dos tablas, devolviendo todas las combinaciones posibles de todas las filas. No tiene on
cláusula porque solo estás uniendo todo a todo.
A full outer join
es una combinación de a left outer
y right outer
join. Devuelve todas las filas en ambas tablas que coinciden con la where
cláusula de la consulta , y en los casos en on
que no se puede cumplir la condición para esas filas, coloca null
valores para los campos despoblados.
Este artículo de wikipedia explica los diversos tipos de combinaciones con ejemplos de salida dado un conjunto de tablas de muestra.
FROM t1 FULL OUTER JOIN t2 ON t1.id=t2.id
, siempre será más rápido queFROM t1,t2 WHERE t1.id=t2.id
?outer join
más rápido ocross join
?Una cosa que puede no ser siempre obvia para algunos es que una unión cruzada con una tabla vacía (o conjunto de resultados) da como resultado una tabla vacía (M x N; de ahí que M x 0 = 0)
Una unión externa completa siempre tendrá filas a menos que M y N sean 0.
fuente
Me gustaría agregar un aspecto importante a otras respuestas, que realmente me explicaron este tema de la mejor manera:
Si 2 tablas unidas contienen M y N filas, entonces la unión cruzada siempre producirá filas (M x N), pero la unión externa completa producirá desde MAX (M, N) hasta filas (M + N) (dependiendo de cuántas filas realmente coincidencia "en" predicado).
EDITAR:
Desde la perspectiva del procesamiento de consultas lógicas, CROSS JOIN siempre produce M x N filas. Lo que sucede con FULL OUTER JOIN es que las tablas izquierda y derecha están "preservadas", como si hubiera sucedido la unión IZQUIERDA y DERECHA. Entonces, las filas, que no satisfacen el predicado ON, de las tablas izquierda y derecha se agregan al conjunto de resultados.
fuente
cross join
multiplica las tablas; a losfull outer join
agrega en el peor de los casos, dependiendo de cuántas filas coincidan ..Cross join: Cross Joins produce resultados que consisten en cada combinación de filas de dos o más tablas. Eso significa que si la tabla A tiene 3 filas y la tabla B tiene 2 filas, una CROSS JOIN dará como resultado 6 filas. No hay una relación establecida entre las dos tablas: literalmente, solo produce todas las combinaciones posibles.
Unión externa completa: UNA UNIÓN COMPLETA EXTERNA no es ni "izquierda" ni "derecha", ¡son ambas cosas! Incluye todas las filas de ambas tablas o conjuntos de resultados que participan en JOIN. Cuando no existen filas coincidentes para las filas en el lado "izquierdo" de JOIN, verá los valores nulos del conjunto de resultados en el "derecho". Por el contrario, cuando no existen filas coincidentes para las filas en el lado "derecho" de JOIN, verá los valores nulos del conjunto de resultados en el "izquierdo".
fuente
Para SQL Server,
CROSS JOIN and FULL OUTER JOIN
son diferentes.CROSS JOIN
es simplemente un producto cartesiano de dos tablas, independientemente de cualquier criterio de filtro o condición.FULL OUTER JOIN
da un conjunto de resultados únicoLEFT OUTER JOIN and RIGHT OUTER JOIN
de dos tablas. También necesita la cláusula ON para asignar dos columnas de tablas.fuente
Son los mismos conceptos, aparte del valor NULL devuelto.
Vea abajo:
fuente
Cross Join : http://www.dba-oracle.com/t_garmany_9_sql_cross_join.htm
TLDR; Genera todas las combinaciones posibles entre 2 tablas (producto carthesiano)
(Completo) Unión externa : http://www.w3schools.com/Sql/sql_join_full.asp
TLDR; Devuelve cada fila en ambas tablas y también resultados que tienen los mismos valores (coincidencias en CONDITION)
fuente
Una unión externa completa combina una unión externa izquierda y una unión externa derecha. El conjunto de resultados devuelve filas de ambas tablas donde se cumplen las condiciones, pero devuelve columnas nulas donde no hay coincidencia.
Una unión cruzada es un producto cartesiano que no requiere ninguna condición para unir tablas. El conjunto de resultados contiene filas y columnas que son una multiplicación de ambas tablas.
fuente
Aquí hay un ejemplo en el que tanto FULL OUTER JOIN como CROSS JOIN devuelven el mismo conjunto de resultados sin NULL devuelto. Tenga en cuenta el 1 = 1 en la cláusula ON para FULL OUTER JOIN:
fuente
SQL FULL OUTER JOIN
FULL OUTER JOIN devuelve todas las filas de la tabla izquierda (tabla1) y de la tabla derecha (tabla2) independientemente de la coincidencia.
La palabra clave FULL OUTER JOIN combina el resultado de LEFT OUTER JOIN y RIGHT OUTER JOIN
Referencia: http://datasciencemadesimple.com/sql-full-outer-join/
SQL CROSS JOIN
En SQL CROSS JOIN, cada fila de la primera tabla se asigna con todas y cada una de las filas de la segunda tabla.
El número de filas producidas por un conjunto de resultados de la operación CROSS JOIN es igual al número de filas en la primera tabla multiplicado por el número de filas en la segunda tabla.
CROSS JOIN también se conoce como producto cartesiano / unión cartesiana
El número de filas en la tabla A es m, el número de filas en la tabla B es n y la tabla resultante tendrá m * n filas
Referencia: http://datasciencemadesimple.com/sql-cross-join/
fuente