Maison >base de données >tutoriel mysql >Jointures SQL : quelles sont les différences de performances et de syntaxe entre USING, ON et WHERE ?
Méthodes SQL JOIN : différences de performances et de syntaxe de USING, ON et WHERE
SQL propose plusieurs options pour joindre des tables : USING, ON et WHERE. Bien que la fonctionnalité de ces options soit similaire, des malentendus sur leurs performances et leur signification syntaxique peuvent survenir. Cet article explore les différences entre ces méthodes de connexion.
Performances
Contrairement à la croyance populaire, il n'y a pas de différences de performances significatives entre les trois méthodes de connexion. Les trois méthodes produisent le même plan de requête optimisé.
Syntaxe et sémantique
Syntaxe ANSI :
Syntaxe USING :
Ambiguïté de « rejoindre le où » (INNER JOIN implicite)
L'utilisation d'une clause WHERE pour spécifier les conditions de jointure peut conduire à une ambiguïté, en particulier dans les types de jointure externe. Le problème provient de l'ordre logique de traitement des requêtes dans SQL Server, où FROM est évalué avant WHERE. « rejoindre le où » peut créer par inadvertance un produit cartésien ou produire des résultats inattendus.
Ambiguïté grammaticale :
Les deux requêtes suivantes illustrent les ambiguïtés de syntaxe qui peuvent survenir lors du mélange de jointures internes implicites dans la clause WHERE avec des jointures externes explicites dans la clause FROM :
<code class="language-sql">FROM T1, T2, T3 WHERE T1.ID = T2.ID AND T1.foo = 'bar' AND T2.fish = 42 FROM T1 INNER JOIN T2 ON T1.ID = T2.ID INNER JOIN T3 ON T1.ID = T3.ID WHERE T1.foo = 'bar' AND T2.fish = 42</code>
L'ambiguïté naît de l'incapacité de déterminer clairement quelles connexions sont externes et lesquelles sont internes.
Recommandation :
Pour plus de clarté, de cohérence et de compatibilité avec les standards SQL modernes, il est recommandé :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!