Mysql
 sql >> Base de données >  >> RDS >> Mysql

En SQL, quelle est la différence entre JOIN et CROSS JOIN ?

SQL propose les types de jointures suivants, qui proviennent tous directement de la théorie des ensembles :

  • Jointure interne.
    From A inner join B est l'équivalent de A ∩ B, fournissant l'ensemble des éléments communs aux deux ensembles.

  • Jointure externe gauche.
    From A left outer join B est l'équivalent de (A − B) ∪ (A ∩ B). Chaque A apparaîtra au moins une fois ; s'il y a plusieurs B correspondants, le A sera répété une fois par B correspondant.

  • Jointure externe droite.
    From A right outer join B est l'équivalent de (A ∩ B) ∪ (B − A). Elle est identique à une jointure gauche avec les tables d'échange de places. Chaque B apparaîtra au moins une fois ; s'il y a plusieurs As correspondants, chaque B sera répété une fois par B correspondant.

  • Jointure externe complète.
    From A full outer join B est l'équivalent de (A − B) ∪ (A ∩ B) ∪ (B − A). Chaque A et chaque B apparaîtront au moins une fois. Si un A correspond à plusieurs B, il sera répété une fois par match ; si un B correspond à plusieurs A, il sera répété une fois par match.

  • Jointure croisée.
    From A cross join B est produit le produit cartésien A × B. Chaque A sera répété une fois pour chaque B. Si A a 100 lignes et B a 100 lignes, le jeu de résultats sera composé de 10 000 lignes.

A noter que l'exécution théorique d'un select requête se compose des étapes suivantes exécutées dans cet ordre :

  1. Calculer le produit cartésien complet du ou des ensembles sources dans le from clause pour amorcer le jeu de résultats candidat.

  2. Appliquer les critères de jointure dans le from clause et réduire l'ensemble de résultats candidats.

  3. Appliquer les critères dans la where clause pour réduire davantage l'ensemble de résultats candidats.

  4. partitionnez l'ensemble de résultats candidats en groupes en fonction des critères du group by clause.

  5. Supprimez du jeu de résultats candidat toutes les colonnes autres que celles impliquées dans le group by clause ou impliqué dans l'évaluation d'une fonction d'agrégation.

  6. Calculez la valeur de ces fonctions d'agrégation pour chaque groupe dans l'ensemble de résultats candidats.

  7. Réduisez chaque groupe du jeu de résultats candidat en une seule ligne composée des colonnes de regroupement et des valeurs calculées pour chaque fonction d'agrégation. L'ensemble de résultats candidats se compose désormais d'une ligne pour chaque groupe, avec toutes les colonnes autres que group by colonnes ou les valeurs de calcul des fonctions d'agrégation pour le groupe sont éliminées.

  8. Appliquer les critères dans le having clause pour réduire le jeu de résultats candidat et produire le jeu de résultats final.

  9. Ordonner le résultat final défini par les critères dans order by clause et émettez-la.

Il y a plus d'étapes, ayant à voir avec des choses comme compute et compute by clauses, mais cela est suffisant pour avoir la notion théorique de son fonctionnement.

Il convient également de noter que seule l'implémentation la plus naïve évaluerait réellement un select déclaration de cette façon, mais les résultats produits doivent être les mêmes que si les étapes ci-dessus avaient été effectuées dans leur intégralité.