Maison >base de données >tutoriel mysql >Jointures SQL : quelles sont les différences de performances et de syntaxe entre USING, ON et WHERE ?

Jointures SQL : quelles sont les différences de performances et de syntaxe entre USING, ON et WHERE ?

DDD
DDDoriginal
2025-01-21 21:51:15533parcourir

SQL Joins: What are the Performance and Syntax Differences Between USING, ON, and 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 :

  • JOIN ​​​​(introduit dans ANSI-92) est la syntaxe recommandée pour effectuer des jointures. Il utilise la clause ON pour définir explicitement les conditions de jointure.
  • WHERE (ANSI-89) permet l'utilisation d'une clause WHERE pour spécifier les conditions de jointure, mais elle est obsolète en raison de problèmes potentiels de lisibilité et d'ambiguïté.

Syntaxe USING :

  • USING (introduit dans SQL:2003) est une syntaxe abrégée qui utilise le mot-clé USING pour spécifier des colonnes communes entre les tables jointes. Il fournit une syntaxe concise et intuitive.

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

  • Utilisez des jointures explicites (syntaxe JOIN avec clause ON) pour toutes les jointures.
  • Évitez d'utiliser "join thewhere" (INNER JOIN implicite dans la clause WHERE).
  • Utilisez la syntaxe ANSI-92 (JOIN avec clause ON) pour la compatibilité multiplateforme.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn