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

Différence entre ces deux approches de table de jointure ?

À part la syntaxe, pour le petit extrait, ils fonctionnent exactement de la même manière. Mais si possible, écrivez toujours de nouvelles requêtes en utilisant ANSI-JOINs.

Quant à sémantiquement, la notation par virgule est utilisée pour produire un produit CARTESIEN entre deux tables, ce qui signifie produire une matrice de tous les enregistrements de la table A avec tous les enregistrements de la table B, donc deux tables avec 4 et 6 enregistrements produisent respectivement 24 enregistrements. À l'aide de la clause WHERE, vous pouvez ensuite sélectionner les lignes que vous souhaitez réellement dans ce produit cartésien. Cependant, MySQL ne suit pas et ne crée pas cette énorme matrice, mais sémantiquement, c'est ce que cela signifie.

Une syntaxe JOIN est la norme ANSI qui définit plus clairement comment les tables interagissent. En mettant le ON clause à côté de JOIN , cela indique clairement ce qui relie les deux tables.

Fonctionnellement, ils effectueront la même chose pour vos deux requêtes. La différence apparaît lorsque vous commencez à utiliser d'autres [OUTER] Types de jointure.

Pour MySQL en particulier, la notation par virgule a une différence

STRAIGHT_JOIN est similaire à JOIN, sauf que la table de gauche est toujours lue avant la table de droite. Cela peut être utilisé pour les (quelques) cas pour lesquels l'optimiseur de jointure place les tables dans le mauvais ordre.

Cependant, il ne serait pas judicieux miser sur cette différence.