tipos tablas outer inner full ejemplos sql-server cross-join full-outer-join

tablas - SQL Server: ¿Cuál es la diferencia entre CROSS JOIN y FULL OUTER JOIN?



join sql server ejemplos (10)

Únete cruzado: http://www.dba-oracle.com/t_garmany_9_sql_cross_join.htm

TLDR: genera todas las combinaciones posibles entre 2 tablas (producto de Carthesian)

(Completo) Conexión externa: http://www.w3schools.com/Sql/sql_join_full.asp

TLDR: devuelve cada fila en tablas de bot y coincide con los resultados que tienen los mismos valores

¿Cuál es la diferencia entre CROSS JOIN y FULL OUTER JOIN en SQL Server?

¿Son lo mismo o no? Por favor explique. ¿Cuándo se usaría cualquiera de estos?


Aquí hay un ejemplo donde tanto FULL OUTER JOIN como CROSS JOIN devuelven el mismo conjunto de resultados sin devolver NULL. Tenga en cuenta que 1 = 1 en la cláusula ON para el FULL OUTER JOIN:

declare @table1 table ( col1 int, col2 int ) declare @table2 table ( col1 int, col2 int ) insert into @table1 select 1, 11 union all select 2, 22 insert into @table2 select 10, 101 union all select 2, 202 select * from @table1 t1 full outer join @table2 t2 on 1 = 1

(2 row(s) affected) (2 row(s) affected) col1 col2 col1 col2 ----------- ----------- ----------- ----------- 1 11 10 101 2 22 10 101 1 11 2 202 2 22 2 202

select * from @table1 t1 cross join @table2 t2

col1 col2 col1 col2 ----------- ----------- ----------- ----------- 1 11 10 101 2 22 10 101 1 11 2 202 2 22 2 202 (4 row(s) affected)


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 UNIÓN CRUZADA dará como resultado 6 filas. No existe una relación establecida entre las dos tablas: literalmente solo produces todas las combinaciones posibles.

Full outer Join: A FULL OUTER JOIN no es ni "izquierda" ni "derecha", ¡son las dos! 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á valores nulos del conjunto de resultados en la "derecha". Por el contrario, cuando no existen filas coincidentes para filas en el lado "derecho" de JOIN, verá valores nulos del conjunto de resultados en la "izquierda".


Hola, son los mismos conceptos aparte del valor NULL devuelto.

Vea abajo:

declare @table1 table ( col1 int, col2 int ) declare @table2 table ( col1 int, col2 int ) insert into @table1 select 1, 11 union all select 2, 22 insert into @table2 select 10, 101 union all select 2, 202 select * from @table1 t1 full outer join @table2 t2 on t1.col1 = t2.col1 /* RESULT col1 col2 col1 col2 ----------- ----------- ----------- ----------- NULL NULL 10 101 2 22 2 202 1 11 NULL NULL (3 row(s) affected) */ select * from @table1 t1 cross join @table2 t2 /* RESULT col1 col2 col1 col2 ----------- ----------- ----------- ----------- 1 11 10 101 2 22 10 101 1 11 2 202 2 22 2 202 (4 row(s) affected) */


Me gustaría agregar un aspecto importante a otras respuestas, que de hecho me explicaron este tema de la mejor manera:

Si 2 tablas unidas contienen filas M y N, la unión cruzada siempre producirá (M x N) filas, pero la combinación externa total producirá desde las filas MAX (M, N) a (M + N) (dependiendo de cuántas filas realmente coincide con el predicado "on").

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 ambas tablas, izquierda y derecha, están "preservadas", como si se hubiera producido la combinación de IZQUIERDA y DERECHA. Por lo tanto, las filas, que no satisfacen el predicado ON, de las tablas izquierda y derecha se agregan al conjunto de resultados.


Para SQL Server, CROSS JOIN and FULL OUTER JOIN son diferentes. CROSS JOIN es simplemente producto cartesiano de dos tablas, independientemente de cualquier criterio de filtro o cualquier condición.

FULL OUTER JOIN ofrece un conjunto único de resultados de LEFT OUTER JOIN and RIGHT OUTER JOIN de dos tablas. También necesita la cláusula ON para mapear dos columnas de tablas.

La Tabla 1 contiene 10 filas y la Tabla 2 contiene 20 filas con 5 filas que coinciden en columnas específicas.

Entonces CROSS JOIN devolverá 10 * 20 = 200 filas en el conjunto de resultados.

FULL OUTER JOIN devolverá 25 filas en el conjunto de resultados.

FULL OUTER JOIN (o cualquier otro JOIN) siempre devuelve el conjunto de resultados con un número menor o igual al Cartesian Product number .

Número de filas devueltas por FULL OUTER JOIN igual a (Nº de filas por LEFT OUTER JOIN ) + (Nº de filas por RIGHT OUTER JOIN ) - (Nº de filas por INNER JOIN ).


Una cosa que puede no ser siempre obvia para algunos es que una combinación cruzada con una tabla vacía (o conjunto de resultados) da como resultado una tabla vacía (M x N; por lo tanto M x 0 = 0)

Una combinación externa completa siempre tendrá filas a menos que tanto M como N sean 0.


Unión externa completa:

Esta combinación combina combinación externa izquierda y combinación externa derecha. Devuelve una fila de cualquiera de las tablas cuando se cumplen las condiciones y devuelve un valor nulo cuando no hay coincidencia.

imagen: ( http://www.pinaldave.com/bimg/March09UG/outer%20join.jpg )

Cross Join:

Esta unión es una unión cartesiana que no necesita ninguna condición para unirse. El conjunto de resultados contiene registros que son la multiplicación del número de registro de ambas tablas.

imagen: ( http://www.pinaldave.com/bimg/March09UG/cross%20join%20-%20half.jpg )


SQL FULL OUTER JOIN

  • El FULL OUTER JOIN devuelve todas las filas de la tabla de la izquierda (tabla1) y de la tabla de la derecha (tabla2), independientemente de la coincidencia.

  • La palabra clave FULL OUTER JOIN combina el resultado de LEFT OUTER JOIN y RIGHT OUTER JOIN

  • La combinación externa completa de SQL también se conoce como unión completa

Referencia: http://datasciencemadesimple.com/sql-full-outer-join/

SQL CROSS JOIN

  • En SQL CROSS JOIN, cada fila de la primera tabla se correlaciona 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/


Una unión cruzada produce un producto cartesiano entre las dos tablas, devolviendo todas las combinaciones posibles de todas las filas. No tiene cláusula on porque simplemente estás uniendo todo a todo.

Una full outer join es una combinación de una combinación left outer y una combinación left outer right outer . Devuelve todas las filas en ambas tablas que coinciden con la cláusula where la consulta, y en los casos on que no se puede cumplir la condición on para esas filas, pone valores null para los campos despoblados.

Este artículo de wikipedia explica los diversos tipos de combinaciones con ejemplos de resultados dado un conjunto de tablas de muestra.