Ordre de jointure SQL : cela a-t-il un impact sur les résultats ?
Cet article explore si la modification de l'ordre de jointure dans les requêtes SQL affecte le résultat, en particulier lors de la combinaison de jointures internes et externes. Nous ne tiendrons pas compte des implications en termes de performances pour cette analyse.
Rejointures internes :
L'ordre des tables dans les jointures internes est sans conséquence. Les résultats restent identiques, à condition que la clause SELECT
soit ajustée pour répertorier explicitement les colonnes (par exemple, SELECT a.*, b.*, c.*
au lieu de SELECT *
).
Jointures externes (GAUCHE, DROITE, COMPLÈTE) :
La situation diffère considérablement pour les jointures externes :
a LEFT JOIN b
n'est pas la même chose que b LEFT JOIN a
.<code class="language-sql">a LEFT JOIN b ON b.ab_id = a.ab_id LEFT JOIN c ON c.ac_id = a.ac_id</code>
<code class="language-sql">a LEFT JOIN c ON c.ac_id = a.ac_id LEFT JOIN b ON b.ab_id = a.ab_id</code>
<code class="language-sql">a LEFT JOIN b ON b.ab_id = a.ab_id LEFT JOIN c ON c.ac_id = a.ac_id AND c.bc_id = b.bc_id</code>
Structure des conditions de participation :
La structure des conditions d'adhésion est cruciale. Par exemple :
<code class="language-sql">a LEFT JOIN b ON b.ab_id = a.ab_id LEFT JOIN c ON c.bc_id = b.bc_id</code>
est seulement équivalent à :
<code class="language-sql">a LEFT JOIN (b LEFT JOIN c ON c.bc_id = b.bc_id) ON b.ab_id = a.ab_id</code>
à condition que les conditions de jointure utilisent uniquement des contrôles d'égalité sans comparaisons de valeurs NULL. L'inclusion de comparaisons NULL ou de fonctions comme COALESCE()
peut rompre l'équivalence entre des requêtes ordonnées différemment.
En résumé, même si l'ordre de jointure interne n'a pas d'importance, l'ordre de jointure externe a un impact significatif sur les résultats. Un examen attentif des conditions de jointure, en particulier concernant les valeurs NULL, est essentiel lorsque vous travaillez avec des jointures externes.
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!