sql >> Base de Datos >  >> RDS >> Mysql

En SQL, ¿cuál es la diferencia entre JOIN y CROSS JOIN?

SQL tiene los siguientes tipos de uniones, todas las cuales provienen directamente de la teoría de conjuntos:

  • Unión interna.
    From A inner join B es el equivalente de A ∩ B, proporcionando el conjunto de elementos comunes a ambos conjuntos.

  • Unión externa izquierda.
    From A left outer join B es el equivalente de (A − B) ∪ (A ∩ B). Cada A aparecerá al menos una vez; si hay varias B coincidentes, la A se repetirá una vez por cada B coincidente.

  • Unión externa derecha.
    From A right outer join B es el equivalente de (A ∩ B) ∪ (B − A). Es idéntico a una combinación izquierda con las mesas intercambiando lugares. Cada B aparecerá al menos una vez; si hay múltiples As coincidentes, cada B se repetirá una vez por cada B coincidente.

  • Unión externa completa.
    From A full outer join B es el equivalente de (A − B) ∪ (A ∩ B) ∪ (B − A). Cada A y cada B aparecerán al menos una vez. Si una A coincide con varias B, se repetirá una vez por coincidencia; si una B coincide con varias As, se repetirá una vez por coincidencia.

  • Unión cruzada.
    From A cross join B se produce el producto cartesiano A × B. Cada A se repetirá una vez por cada B. Si A tiene 100 filas y B tiene 100 filas, el conjunto de resultados constará de 10 000 filas.

Cabe señalar que la ejecución teórica de un select la consulta consta de los siguientes pasos realizados en este orden:

  1. Calcule el producto cartesiano completo de los conjuntos fuente en el from cláusula para preparar el conjunto de resultados candidato.

  2. Aplicar los criterios de unión en el from y reducir el conjunto de resultados candidatos.

  3. Aplicar los criterios en la cláusula where clause para reducir aún más el conjunto de resultados candidatos.

  4. divida el conjunto de resultados del candidato en grupos según los criterios de group by cláusula.

  5. Eliminar del conjunto de resultados de candidatos cualquier columna que no sea la que está involucrada en el group by cláusula o involucrada en la evaluación de una función agregada.

  6. Calcule el valor de cualquiera de estas funciones agregadas para cada grupo en el conjunto de resultados candidato.

  7. Contraer cada grupo en el conjunto de resultados candidato en una sola fila que consta de las columnas de agrupación y los valores calculados para cada función agregada. El conjunto de resultados de candidatos ahora consta de una fila para cada grupo, con todas las columnas excepto group by se eliminan las columnas o los valores de cálculo de las funciones agregadas para el grupo.

  8. Aplicar los criterios en el having cláusula para reducir el conjunto de resultados candidatos y producir el conjunto de resultados final.

  9. Ordene el resultado final establecido por los criterios en order by cláusula y emitirla.

Hay más pasos que tienen que ver con cosas como compute y compute by cláusulas, pero esto es suficiente para obtener la noción teórica de cómo funciona.

También se debe tener en cuenta que solo la implementación más ingenua evaluaría realmente un select declaración de esta manera, pero los resultados producidos deben ser los mismos que si los pasos anteriores se realizaran en su totalidad.