Saltar al contenido

CROSS JOIN vs INNER JOIN en SQL

Solución:

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

Considere las siguientes tablas

MESA : Teacher

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

MESA : Student

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

1. INNER JOIN

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

Considere que necesitamos encontrar los profesores que son profesores de clase y sus alumnos correspondientes. En esa condición, necesitamos aplicar JOIN o INNER JOIN y la voluntad

ingrese la descripción de la imagen aquí

Consulta

SELECT T.TchrId,T.TeacherName,S.StudentName 
FROM #Teacher T
INNER JOIN #Student S ON T.TchrId = S.TchrId
  • Violín SQL

Resultado

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

2. UNIÓN CRUZADA

La unió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.

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

ingrese la descripción de la imagen aquí

Consulta

SELECT T.TchrId,T.TeacherName,S.StudentName 
FROM #Teacher T
CROSS JOIN #Student S 
  • Violín SQL

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 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:

Unión cruzada

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

CROSS JOIN = (INNER) JOIN = coma (“,”)

TL; DR La única diferencia entre SQL CROSS JOIN, (INNER) JOIN y la coma (“,”) (además de que la coma tiene menor precedencia 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 de estilo SQL conceptual intermedio, también conocido como unión cruzada, de todas las combinaciones posibles de una fila de cada tabla. Es ON y / o DONDE lo que reduce el número de filas. Violín SQL

El estándar SQL define a través del producto (7.5 1.b.ii), también conocido como CROSS JOIN a través de (7.7 1.a) y (INTERIOR) UNIRSE EN vía más DÓNDE (7.7 1.b).

Como dice Wikipedia:

Unión cruzada
CROSS JOIN devuelve el producto cartesiano de filas de tablas en la combinació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 de las tablas (combinando todos los registros de la tabla A con todos los registros de la tabla B) y luego devolver todos los registros que satisfacen el unir predicado.

La “notación de combinació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 unión cruzada

Re EXTERIOR ÚNETE ver mi respuesta ¿Cuál es la diferencia entre “INNER JOIN” y “OUTER JOIN” ?.

Re OUTER JOINs y usando ON vs WHERE en ellos, vea mi respuesta Condiciones en LEFT JOIN (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 un cierto relleno[named-]plantilla de declaración de espacios en blanco. (Hace un verdadero proposición de–satisface– un cierto (característico) predicado.)

  • Una tabla base contiene las filas que hacen una declaración verdadera de alguna plantilla de declaración proporcionada por el DBA:

      /* rows where
      customer C.CustomerID has age C.Age and ...
      */
      FROM Customers C
    
  • El producto intermedio de una unión contiene las filas que hacen una declaración verdadera a partir del AND de las plantillas de sus operandos:

      /* rows where
          customer C.CustomerID has age C.Age and ...
      AND movie M.Movie is rented by customer M.CustomerID and ...
      */
      FROM Customers C CROSS JOIN Movies M
    
  • Las condiciones ON & WHERE se anotan en AND para proporcionar una plantilla adicional. El valor son nuevamente las filas que satisfacen esa plantilla:

      /* rows where
          customer C.CustomerID has age C.Age and ...
      AND movie M.Movie is rented by customer M.CustomerID and ...
      AND C.CustomerID = M.CustomerID
      AND C.Age >= M.[Minimum Age]
      AND C.Age = 18
      */
      FROM Customers C INNER JOIN Movies M
      ON C.CustomerID = M.CustomerID
      AND C.Age >= M.[Minimum Age]
      WHERE C.Age = 18
    

En particular, comparar columnas para la igualdad (SQL) entre tablas significa que las filas que se mantienen del producto de las partes de la plantilla de las tablas unidas tienen el mismo valor (no NULO) para esas columnas. Es una coincidencia que muchas filas se eliminen normalmente 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!

Con respecto al significado de las consultas (y tablas frente a condiciones), consulte:
¿Cómo obtener datos coincidentes de otra tabla SQL para dos columnas diferentes: Inner Join y / o Union?
¿Existe alguna regla general para construir consultas SQL a partir de una descripción legible por humanos?

Sobrecarga de “unión cruzada”

Desafortunadamente, el término “unión cruzada” se usa para:

  • El producto intermedio.
  • ÚNETE CRUZADO.
  • (INTERIOR) ÚNETE con un ON o DONDE que no compara ninguna columna de una tabla con ninguna columna de otra. (Dado que eso tiende a devolver muchas de las filas de productos intermedios).

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

Usando CROSS JOIN vs (INNER) JOIN vs coma

La convención común es:

  • Utilice CROSS JOIN cuando y solo cuando no compare columnas entre tablas. Eso es para demostrar que la falta de comparaciones fue intencional.
  • Utilice (INNER) JOIN con ON cuando y solo cuando compare columnas entre tablas. (Más posiblemente otras condiciones).
  • No uses coma.

Por lo general, las condiciones que no están en pares de tablas se mantienen para un DÓNDE. Pero es posible que deban colocarse en un (n INNER) JOIN ON para obtener las filas adecuadas para el argumento de un RIGHT, LEFT o FULL (OUTER) JOIN.

Re “No uses coma” Mezclar coma con JOIN explícito puede inducir a error porque la coma tiene una precedencia menor. Pero dado el papel del producto intermedio en el significado de CROSS JOIN, (INNER) JOIN y coma, los argumentos para la convención anterior de no usarlo en absoluto son inestables. Un CROSS JOIN o una coma es como un (INNER) JOIN que está EN una condición VERDADERA. Un producto intermedio, ON y WHERE 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 combinación cruzada que satisfacen la condición. La única razón EN tenía complementar la coma en SQL era escribir EXTERIOR Uniones. Por supuesto, una expresión debe dejar claro su significado; pero lo que está claro depende de lo que se entienda que significan las cosas.

Diagramas de Re Venn Un diagrama de Venn con dos círculos que se cruzan puede ilustrar la diferencia entre filas de salida para INNER, LEFT, RIGHT & FULL JOINs para la misma entrada. Y cuando ON es incondicionalmente TRUE, el resultado INNER JOIN es el mismo que CROSS JOIN. También puede ilustrar el 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 LEFT & RIGHT JOIN. Pero lo hace no ilustre cómo (INNER) JOIN funciona en general. Que solo parece plausible a primera vista. Puede identificar partes de entrada y / o salida para casos especiales de ON, PK (claves primarias), FK (claves externas) y / o SELECT. Todo lo que tiene que hacer para ver esto es identificar ¿Cuáles son exactamente los elementos de los conjuntos representados por los círculos?. (Lo que las presentaciones confusas nunca dejan en claro). Recuerde que, en general, para las combinaciones las filas de salida tienen diferentes encabezados de las filas de entrada. Y las tablas SQL son pantalón no conjuntos de filas con NULL.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *