Maison > base de données > tutoriel mysql > L'ordre de jointure affecte-t-il les résultats des requêtes SQL ?

L'ordre de jointure affecte-t-il les résultats des requêtes SQL ?

Patricia Arquette
Libérer: 2025-01-17 17:31:09
original
865 Les gens l'ont consulté

Does Join Order Affect SQL Query Results?

Ordre de jointure SQL : cela a-t-il un impact sur les résultats ?

Rejointures externes : l'ordre compte

L'ordre des opérations a un impact significatif sur les résultats des LEFT, RIGHT et FULL OUTER JOINs.

Commutativité et associativité : non garanties

  • Les jointures externes ne sont pas commutatives. A LEFT JOIN B est différent de B LEFT JOIN A.
  • Les jointures externes sont non associatives. L'ordre dans lequel plusieurs jointures sont effectuées affecte directement le résultat. Par conséquent :
a LEFT JOIN b ON b.ab_id = a.ab_id
LEFT JOIN c ON c.ac_id = a.ac_id
Copier après la connexion

n'est pas garanti être identique à :

a LEFT JOIN c ON c.ac_id = a.ac_id
LEFT JOIN b ON b.ab_id = a.ab_id
Copier après la connexion

Scénarios où l'ordre est critique

L'ordre de jointure devient crucial lorsqu'il s'agit de AND conditions impliquant NULL valeurs ou fonctions sensibles à NULLs (comme COALESCE()). Par exemple :

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
Copier après la connexion

Cette requête donnera un résultat différent de :

a LEFT JOIN c ON c.ac_id = a.ac_id AND c.bc_id = b.bc_id
LEFT JOIN b ON b.ab_id = a.ab_id
Copier après la connexion

Jointures internes : indépendance de l'ordre

Contrairement aux jointures externes, l'ordre des INNER JOINs n'affecte pas l'ensemble de résultats final. A JOIN B et B JOIN A produisent des résultats identiques (en supposant des ajustements appropriés à la clause SELECT, par exemple SELECT a.*, b.*, c.*).

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal