¿Cuál es la diferencia entre CROSS JOIN
y INNER JOIN
?
CROSS JOIN:
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é usaría cualquiera?
sql
sql-server
sql-server-2008
tsql
cross-join
PriceCheaperton
fuente
fuente
CROSS JOIN
dará como resultado todas las combinaciones posibles de las tablas. por ejemplo, Tabla1 con 100 filas y Tabla2 con 100 filas dará como resultado 10000 registros.x CROSS JOIN y
esx INNER JOIN y ON 1=1
Respuestas:
La combinación cruzada no combina las filas, si tiene 100 filas en cada tabla con una coincidencia de 1 a 1, obtiene 10.000 resultados, Innerjoin solo devolverá 100 filas en la misma situación.
Estos 2 ejemplos devolverán el mismo resultado:
Cruz unirse
Unir internamente
Usa el último método
fuente
select * from table1 cross join table2 where table1.id = table2.fk_id
comoselect * from table1, table2 where table1.id = table2.fk_id
(reemplazandocross join
con a,
)Aquí está el mejor ejemplo de Cross Join y Inner Join.
Considere las siguientes tablas
MESA :
Teacher
MESA :
Student
1. UNIÓN INTERNA
La unión interna selecciona las filas que satisfacen tanto la tabla .
Considere que necesitamos encontrar los maestros que son maestros de clase y sus estudiantes correspondientes. En esa condición, necesitamos aplicar
JOIN
o loINNER JOIN
haremosConsulta
Resultado
2. UNIÓN CRUZADA
La combinación cruzada 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.
Consideremos que necesitamos encontrar a todos los maestros en la escuela y a los estudiantes, independientemente de los maestros de clase.
CROSS JOIN
.Consulta
Resultado
fuente
Cross Join
, ¿crees que no devuelve todas las filas a menosWhere
que se dé una cláusula? De tus comentarios, ¡hay más posibilidades de que un principiante se confunda! @philipxyCROSS JOIN = (INTERIOR) JOIN = coma (",")
TL; DR La única diferencia entre SQL CROSS JOIN, (INNER) JOIN y la coma (",") (además de que la coma tiene menor prioridad para el orden de evaluación) es que (INNER) JOIN tiene un ON mientras que CROSS JOIN y la coma no.
Re productos intermedios
Los tres producen un producto "cartesiano" relacional conceptual intermedio de estilo SQL, también conocido como unión cruzada, de todas las combinaciones posibles de una fila de cada tabla. Está ENCENDIDO y / o DONDE eso reduce el número de filas. Violín de SQL
El estándar SQL define <comma> a través del producto (7.5 1.b.ii), <cross join> a través de <comma> (7.7 1.a) y JOIN ON <condición de búsqueda> a través de <comma> más DONDE (7.7 1.b )
Como dice Wikipedia:
Re EXTERIOR Las juntas y utilizando EN DONDE vs en ellos ver Condiciones en combinación izquierda (OUTER JOIN) vs INNER JOIN .
¿Por qué comparar columnas entre tablas?
Cuando no hay filas duplicadas:
Cada tabla contiene las filas que hacen una declaración verdadera a partir de una determinada plantilla de declaración de relleno en blanco [con nombre]. (Hace una proposición verdadera de-- satisface --un cierto predicado (característico) .)
Una tabla base contiene las filas que hacen una declaración verdadera de alguna plantilla de declaración dada por DBA:
El producto intermedio de una unión contiene las filas que hacen una declaración verdadera del AND de las plantillas de sus operandos:
ENCENDIDO Y DONDE las condiciones se ANDAN para dar una plantilla adicional. El valor es nuevamente las filas que satisfacen esa plantilla:
En particular, comparar columnas para la igualdad (SQL) entre tablas significa que las filas guardadas del producto de las partes de las tablas unidas de la plantilla tienen el mismo valor (no NULL) para esas columnas. Es una coincidencia que muchas filas se eliminen típicamente mediante comparaciones de igualdad entre tablas; lo que es necesario y suficiente es caracterizar las filas que desea.
¡Simplemente escriba SQL para la plantilla para las filas que desee!
Consulte el significado de las consultas (y las tablas frente a las condiciones):
¿Cómo obtener datos coincidentes de otra tabla SQL para dos columnas diferentes: Unión interna y / o Unión?
¿Hay alguna regla general para construir una consulta SQL a partir de una descripción legible por humanos?
Sobrecarga de "unión cruzada"
Lamentablemente, el término "unión cruzada" se usa para:
Estos diversos significados se confunden. (Por ejemplo, como en otras respuestas y comentarios aquí).
Uso de CROSS JOIN vs (INNER) JOIN vs comma
La convención común es:
Por lo general, también las condiciones que no están en pares de tablas se mantienen para un DÓNDE. Pero es posible que tengan que colocarse en una (n INNER) JOIN ON para obtener las filas apropiadas para el argumento de una DERECHA, IZQUIERDA o COMPLETA (EXTERIOR).
Re "No usar comas" Mezclar comas con JOIN explícito puede inducir a error porque la coma tiene menor prioridad. Pero dado el papel del producto intermedio en el significado de CROSS JOIN, (INNER) JOIN y la coma, los argumentos para la convención anterior de no usarlo son inestables. Una CROSS JOIN o una coma es como una (INNER) JOIN que está en una condición VERDADERA. Un producto intermedio, ON y WHERE, todos introducen un AND en el predicado correspondiente. Sin embargo, se puede pensar en INNER JOIN ON, por ejemplo, generar una fila de salida solo cuando se encuentra un par de filas de entrada que satisfacen la condición ON, sin embargo, devuelve las filas de unión cruzada que satisfacen la condición. La única razón por la cual ON tenía que complementar la coma en SQL era escribir OUTERUniones. Por supuesto, una expresión debe aclarar su significado; pero lo que está claro depende de lo que se entiende que significan las cosas.
Re Diagramas de Venn Un diagrama de Venn con dos círculos que se cruzan puede ilustrar la diferencia entre las filas de salida para las uniones INNER, LEFT, RIGHT y FULL para la misma entrada. Y cuando el ON es incondicionalmente VERDADERO, el resultado de INNER JOIN es el mismo que CROSS JOIN. También puede ilustrar las filas de entrada y salida para INTERSECT, UNION & EXCEPT. Y cuando ambas entradas tienen las mismas columnas, el resultado INTERSECT es el mismo que para SQL NATURAL JOIN estándar, y el resultado EXCEPT es el mismo que para ciertos modismos que involucran IZQUIERDA DERECHA E IZQUIERDA. Pero no ilustra cómo funciona (INNER) JOIN en general. Eso parece plausible a primera vista . Puede identificar partes de entrada y / o salida paracasos especiales de ON, PK (claves primarias), FK (claves foráneas) y / o SELECT. Todo lo que tiene que hacer para ver esto es identificar exactamente cuáles son los elementos de los conjuntos representados por los círculos . (Que las presentaciones confusas nunca dejan en claro). (Recuerde que, en general, para las filas de salida de las combinaciones tienen encabezados diferentes de las filas de entrada . Y las tablas SQL son bolsas, no conjuntos de filas con NULL ).
fuente
CROSS JOIN
. Me pregunto con qué frecuencia alguien llega a SQL ya familiarizado con el producto cartesiano pero no puede darse cuentaCROSS JOIN
.Unir internamente
La unión que muestra solo las filas que tienen una coincidencia en ambas tablas unidas se conoce como unión interna. Esta es la unión predeterminada en la consulta y el Diseñador de vistas.
Sintaxis para la unión interna
Cross Join
Una unión cruzada que produce el 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
O podemos escribirlo de otra manera también
Ahora verifique la consulta a continuación para la unión cruzada
Ejemplo
O
fuente
Recuerde, si se agrega una cláusula WHERE, la unión cruzada se comporta como una unión interna. Por ejemplo, las siguientes consultas de Transact-SQL producen el mismo conjunto de resultados. Consulte http://technet.microsoft.com/en-us/library/ms190690(v=sql.105).aspx
fuente
CROSS JOIN
Como expliqué en este artículo , CROSS JOIN está destinado a generar un producto cartesiano.
Un producto cartesiano toma dos conjuntos A y B y genera todas las permutaciones posibles de registros de pares a partir de dos conjuntos de datos dados.
Por ejemplo, suponiendo que tiene las siguientes tablas
ranks
ysuits
bases de datos:Y
ranks
tiene las siguientes filas:Mientras que la
suits
tabla contiene los siguientes registros:Como CROSS JOIN consulta como la siguiente:
generará todas las permutaciones posibles de
ranks
ysuites
pares:UNIR INTERNAMENTE
Por otro lado, INNER JOIN no devuelve el producto cartesiano de los dos conjuntos de datos de unión.
En cambio, INNER JOIN toma todos los elementos de la tabla del lado izquierdo y los compara con los registros de la tabla del lado derecho para que:
Por ejemplo, suponiendo que tengamos una relación de tabla de uno a muchos entre las tablas principal
post
y secundariapost_comment
que se ve de la siguiente manera:Ahora, si la
post
tabla tiene los siguientes registros:y la
post_comments
tabla tiene estas filas:Una consulta INNER JOIN como la siguiente:
va a incluir todos los
post
registros junto con todos sus asociadospost_comments
:Para obtener más detalles sobre cómo funciona INNER JOIN, consulte también este artículo .
fuente
SQL Server también acepta la notación más simple de:
Usando esta notación más simple, uno no necesita preocuparse por la diferencia entre 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 qué cláusulas "UNIRSE" "ENCENDIDO" van a dónde, abandone la notación "UNIRSE" y use la más simple de arriba.
No es hacer trampa.
fuente
Al escribir consultas utilizando uniones internas, los registros 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.
Mientras se escribe la consulta usando la unión cruzada, el resultado es como el producto cartesiano del no de registros en ambas tablas. ejemplo, si table1 contiene 2 registros y table2 contiene 3 registros, el resultado de la consulta es 2 * 3 = 6 registros.
Así que no te apuntes hasta que lo necesites.
fuente
La unión cruzada y la unión interna son las mismas, con la única diferencia de que en la unión interna filtramos booleanmente algunos de los resultados del producto cartesiano
Es en el diseño de nuestros datos donde decidimos que solo hay un caso del campo que estamos utilizando para la unión. Unir solo cruzar unir ambas tablas y obtener solo las líneas que logran 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. Cumpliendo con lo básico, es solo una unión cruzada seguida de un filtro.
fuente
La combinación interna dará el resultado de registros coincidentes entre dos tablas, mientras que la combinación cruzada le ofrece las posibles combinaciones entre dos tablas.
fuente
A = {1,5,3,4,6,7,9,8} B = {2,8,5,4,3,6,9}
cross join
actuar como producto cartesiano A ✖ B = {1,2}, {1,8} ..., {5,2}, {5,8}, {5,5} ..... {3,3} ..., {6,6} .... {8,9} y devolvió este largo conjunto de resultados ...cuando procese
inner join
su producto a través del producto cartesiano y elija pares coincidentes ... si piensa que esto ordenó pares como las claves principales de dos tablas y en la cláusula busque A = B entoncesinner join
elija {5,5}, {4,4}, {6,6} , {9,9} y devolvió la columna solicitada en la cláusula select relacionada con estos identificadores.si
cross join
en a = b, entonces es el mismo conjunto de resultados queinner join
. en ese caso también usoinner join
.fuente
Depende de la salida que esperes.
Una unión cruzada hace coincidir todas las filas de una tabla con todas las filas de otra tabla. Una unión interna coincide en un campo o campos. Si tiene una tabla con 10 filas y otra con 10 filas, las dos combinaciones se comportarán de manera diferente.
La unión cruzada tendrá 100 filas devueltas y no estarán relacionadas, solo lo que se llama un producto cartesiano. La unión interna hará coincidir los registros entre sí. Suponiendo que uno tiene una clave principal y que es una clave externa en el otro, obtendría 10 filas devueltas.
Una unión cruzada tiene una utilidad general limitada, pero existe para completar y describe el resultado de unir tablas sin relaciones agregadas a la consulta. Puede usar una combinación cruzada para hacer listas de combinaciones de palabras o algo similar. Una unión interna, por otro lado, es la unión más común.
fuente