sirve que para natural full cross sql sql-server sql-server-2008 tsql cross-join

que - CROSS JOIN vs INNER JOIN en SQL Server 2008



natural join (9)

Unir internamente

La unión que muestra solo las filas que tienen una coincidencia en ambas tablas combinadas se conoce como unión interna. Esta es la combinación predeterminada en la consulta y ver Diseñador.

Sintaxis para la unión interna

SELECT t1.column_name,t2.column_name FROM table_name1 t1 INNER JOIN table_name2 t2 ON t1.column_name=t2.column_name

Cruce Únete

Una unión cruzada que produce un producto cartesiano de las tablas que participan en la unión. El tamaño de un producto cartesiano es el número de filas en la primera tabla multiplicado por el número de filas en la segunda tabla.

Sintaxis para Cross Join

SELECT * FROM table_name1 CROSS JOIN table_name2

O podemos escribirlo de otra manera también

SELECT * FROM table_name1,table_name2

Ahora compruebe la consulta a continuación para Cross join

Ejemplo

SELECT * FROM UserDetails CROSS JOIN OrderDetails

O

SELECT * FROM UserDetails, OrderDetails

Cuál es la diferencia entre CROSS JOIN Y INNER JOIN

CROSS ÚNASE

SELECT Movies.CustomerID, Movies.Movie, Customers.Age, Customers.Gender, Customers.[Education Level], Customers.[Internet Connection], Customers.[Marital Status], FROM Customers CROSS JOIN Movies

UNIR INTERNAMENTE:

SELECT Movies.CustomerID, Movies.Movie, Customers.Age, Customers.Gender, Customers.[Education Level], Customers.[Internet Connection], Customers.[Marital Status] FROM Customers INNER JOIN Movies ON Customers.CustomerID = Movies.CustomerID

¿Cuál es mejor y por qué debería usar cualquiera?


Al escribir consultas usando combinaciones internas, los registros se obtendrán de ambas tablas si la condición se cumple en ambas tablas, es decir, coincidencia exacta de la columna común en ambas tablas.

Al escribir una consulta mediante combinación cruzada, el resultado es similar al producto cartesiano del no de registros en ambas tablas. ejemplo si la tabla 1 contiene 2 registros y la tabla 2 contiene 3 registros, el resultado de la consulta es 2 * 3 = 6 registros.

Así que no intentes cruzar hasta que lo necesites.


Cruce de unión no combina las filas, si tiene 100 filas en cada tabla con 1 a 1 coincidencia, obtiene 10.000 resultados, Innerjoin solo devolverá 100 filas en la misma situación.

Estos 2 ejemplos devolverán el mismo resultado:

Cruce de unión

select * from table1 cross join table2 where table1.id = table2.fk_id

Unir internamente

select * from table1 join table2 on table1.id = table2.fk_id

Usa el último método


Este es el mejor ejemplo de Cross Join y Inner Join.

Considere las siguientes tablas

TABLA: Teacher

x------------------------x | TchrId | TeacherName | x----------|-------------x | T1 | Mary | | T2 | Jim | x------------------------x

TABLA: Student

x--------------------------------------x | StudId | TchrId | StudentName | x----------|-------------|-------------x | S1 | T1 | Vineeth | | S2 | T1 | Unni | x--------------------------------------x

1. UNIÓN INTERNA

La combinación interna selecciona las filas que satisfacen tanto la tabla .

Considere que necesitamos encontrar a los maestros que son maestros de clase y sus alumnos correspondientes. En esa condición, necesitamos aplicar JOIN o INNER JOIN y lo haremos

Consulta

SELECT T.TchrId,T.TeacherName,S.StudentName FROM #Teacher T INNER JOIN #Student S ON T.TchrId = S.TchrId

Resultado

x--------------------------------------x | TchrId | TeacherName | StudentName | x----------|-------------|-------------x | T1 | Mary | Vineeth | | T1 | Mary | Unni | x--------------------------------------x

2. CROSS JOIN

Cross join selecciona todas las filas de la primera tabla y todas las filas de la segunda tabla y se muestra como producto cartesiano, es decir, con todas las posibilidades

Considere que necesitamos encontrar a todos los maestros en la escuela y los estudiantes, independientemente de los maestros de clase, tenemos que aplicar CROSS JOIN .

Consulta

SELECT T.TchrId,T.TeacherName,S.StudentName FROM #Teacher T CROSS JOIN #Student S

Resultado

x--------------------------------------x | TchrId | TeacherName | StudentName | x----------|-------------|-------------x | T2 | Jim | Vineeth | | T2 | Jim | Unni | | T1 | Mary | Vineeth | | T1 | Mary | Unni | x--------------------------------------x


La unión cruzada y la unión interna son las mismas con la única diferencia de que en la combinación interna filtramos booleanamente algunos de los resultados del producto cartesiano

table1 x--------------------------------------x | fieldA | fieldB | fieldC | x----------|-------------|-------------x | A | B | option1 | | A | B1 | option2 | x--------------------------------------x table2 x--------------------------------------x | fieldA | fieldB | fieldC | x----------|-------------|-------------x | A | B | optionB1 | | A1 | B1 | optionB2 | x--------------------------------------x cross join A,B,option1,A,B,optionB1 A,B,option1,A1,B1,optionB2 A,B1,option2,A,B,optionB1 A,B1,option2,A1,B1,optionB2 inner join on field1 (only with the value is the same in both tables) A,B,option1,A,B,optionB1 A,B1,option2,A,B,optionB1 inner join on field1 A,B,option1,A,B,optionB1

Es en el diseño de nuestros datos donde decidimos que solo hay un caso del campo que estamos utilizando para la unión. Únase solo al cruce de ambas tablas y obtenga solo las líneas que logren una expresión booleana especial.

Tenga en cuenta que si los campos en los que hacemos nuestras uniones serían nulos en ambas tablas, pasaríamos el filtro. Depende de nosotros o del fabricante de la base de datos agregar reglas adicionales para evitar o permitir nulos. Siguiendo con lo básico, es solo una combinación cruzada seguida de un filtro.


La unión interna dará el resultado de los registros coincidentes entre dos tablas donde, como la combinación cruzada, le da las posibles combinaciones entre dos tablas.



SQL Server también acepta la notación más simple de:

SELECT A.F, B.G, C.H FROM TABLE_A A, TABLE_B B, TABLE_C C WHERE A.X = B.X AND B.Y = C.Y

Usando esta notación más simple, no es necesario preocuparse por la diferencia entre las uniones internas y cruzadas. En lugar de dos cláusulas "ON", hay una sola cláusula "WHERE" que hace el trabajo. Si tiene alguna dificultad para averiguar a qué cláusulas "ÚNASE" "ENCENDIDO" ir a donde, abandone la notación "UNIR" y use la más simple de arriba.

No es hacer trampa.


CROSS JOIN = (INNER) JOIN = coma (",")

TL; DR La única diferencia entre CROSS JOIN, SQL (INNER) JOIN y "," (además de que la coma tiene menor prioridad para el orden de evaluación) es que (INNER) JOIN tiene un ON mientras CROSS JOIN y coma no.

Re productos cruzados intermedios

Los tres producen un producto cruzado cartesiano conceptual intermedio de SQL de todas las combinaciones posibles de una fila de cada tabla. Está encendido y / o DONDE eso reduce el número de filas. SQL Fiddle

El estándar SQL define <coma> vía producto cruzado (7.5 1.b.ii), <combinación cruzada> mediante <coma> (7.7 1.a) y UNIRSE <condición de búsqueda> a través de <coma> más DONDE (7.7 1. segundo).

Como dice Wikipedia:

Cruce de unión

CROSS JOIN devuelve el producto cartesiano de las filas de las tablas de la unión. En otras palabras, producirá filas que combinan cada fila de la primera tabla con cada fila de la segunda tabla.

Unir internamente

[...] El resultado de la combinación se puede definir como el resultado de tomar primero el producto cartesiano (o combinación cruzada) de todos los registros en las tablas (combinando cada registro en la tabla A con cada registro en la tabla B) y luego regresar todos los registros que satisfacen el predicado de unión.

La "notación de unión implícita" simplemente enumera las tablas para unir, en la cláusula FROM de la instrucción SELECT, usando comas para separarlas. Por lo tanto, especifica una combinación cruzada

Re OUTER JOINs & ON vs WHERE vea this .

¿Por qué comparar columnas entre tablas?

Cada tabla contiene las filas que hacen cierto cierto enunciado de espacios en blanco [nombrados] verdadero:

  • Una tabla base contiene las filas que hacen verdadera cierta afirmación dada por DBA.

-- rows where movie <Movies.CustomerID> has name <Movies.Movie> and ... SELECT * FROM Movies

  • El producto cruzado intermedio de una unión contiene las filas que satisfacen la declaración que es la AND de las instrucciones de sus operandos.

-- rows where movie <Movies.CustomerID> has name <Movies.Movie> and ... AND customers <Customers.ID> has age <Customers.Age> and ... SELECT * FROM Customers CROSS JOIN Movies

  • ON y WHERE las condiciones se ANDed adentro para dar una declaración adicional. El valor es nuevamente las filas que satisfacen esa declaración.

-- rows where movie <Movies.CustomerID> has name <Movies.Movie> and ... AND customer <Customers.ID> has age <Customers.Age> and ... AND <Customers.CustomerID> = <Movies.CustomerID> AND <Customers.CustomerAge> >= <Movies.MinimumAge> AND <Customers.Age> = 18 SELECT * FROM Movies JOIN Customers ON Customers.CustomerID = Movies.CustomerID AND Customers.CustomerAge >= Movies.MinimumAge WHERE Customers.Age = 18

En particular, la comparación de columnas para la igualdad entre las tablas significa que las partes de la declaración combinadas tienen el mismo valor para esas columnas. Es solo una coincidencia que muchas filas generalmente se eliminen mediante comparaciones de igualdad entre tablas.

¡Simplemente escriba SQL para la declaración de las filas que desee!

Con respecto al significado de las consultas (y las tablas frente a las condiciones), vea this .

Usando CROSS JOIN vs (INNER) JOIN vs coma

La convención común es:

  • Utilice CROSS JOIN cuando y solo cuando no compara columnas entre tablas. Eso sugiere que la falta de comparaciones fue intencional.
  • Use (INNER) JOIN con ON cuando y solo cuando tenga comparaciones entre tablas (más posiblemente otras comparaciones).
  • No use la coma

Por lo general, las comparaciones no entre tablas se guardan para DONDE. Pero es posible que tengan que colocarse en (INNER) JOIN ON para obtener las filas apropiadas para el argumento de DERECHO, IZQUIERDO o FULL (EXTERIOR) ÚNASE.

Sobrecarga de "unión cruzada"

Desafortunadamente, el término "combinación cruzada" se usa para:

  • el producto cruzado intermedio
  • CROSS JOIN
  • unir sin un ENCENDIDO o DONDE se comparen las columnas de una tabla con las columnas de otra (ya que eso tiende a devolver tantas filas intermedias de productos cruzados)

Estos diversos significados se confunden. (Por ejemplo, como en otras respuestas y comentarios aquí).

PS Dado el papel del producto cruzado intermedio en el significado de CROSS JOIN, (INNER) JOIN y coma, los argumentos para la convención anterior son inestables. Un CROSS JOIN o coma es como un (INTERIOR) JOIN que está en estado VERDADERO. Un producto cruzado intermedio, ON y DONDE todos introducen AND en el predicado correspondiente. Sin embargo, INNER JOIN "genera coincidencias en" una condición, solo mantiene las filas que cumplen una condición. La única razón por la que ON tuvo que complementar la coma en SQL fue escribir OUTER JOINs. Por supuesto, una expresión debe aclarar su significado; pero la claridad es relativa a un entendimiento particular.)