Maison >base de données >tutoriel mysql >SQL LEFT JOIN vs plusieurs tables dans la clause FROM : quel est le meilleur ?
Syntaxe SQL JOIN : LEFT JOIN et jointures multi-tables dans la clause FROM
Lorsque vous effectuez une jointure SQL interne, vous avez deux options : l'ancienne syntaxe, qui répertorie les tables dans la clause FROM et spécifie les conditions de jointure dans la clause WHERE, ou la syntaxe plus récente, qui l'utilise directement dans la clause FROM. REJOINDRE À GAUCHE. Bien que les deux syntaxes puissent produire les mêmes résultats, il existe de nombreuses raisons pour lesquelles l’utilisation de la syntaxe la plus récente est préférable.
Ambiguïté de l'ancienne syntaxe
L'ancienne syntaxe était ambiguë dans les requêtes combinant INNER JOIN et OUTER JOIN. En fonction de la stratégie de l'optimiseur de requêtes, l'ordre dans lequel les jointures sont effectuées affecte les résultats. Par exemple, un LEFT JOIN suivi d'un INNER JOIN peut exclure les lignes correspondantes qui ne répondent pas aux critères de jointure interne, tandis que l'ordre inverse peut inclure des lignes sans correspondance.
Clarté et explicitité
La nouvelle syntaxe utilisant LEFT JOIN offre plus de clarté et d'ambiguïté. Il spécifie les relations logiques entre les tables, permettant à l'optimiseur de requêtes de gérer efficacement les jointures. En séparant la condition de jointure de la condition de filtre de ligne, la clause LEFT JOIN garantit que toutes les lignes de la table de gauche sont incluses, que des lignes correspondantes existent ou non dans d'autres tables.
Améliorations des performances
En utilisant LEFT JOIN dans la clause FROM, l'optimiseur de requêtes peut optimiser l'opération de jointure indépendamment des filtres de lignes. Cela peut améliorer les performances en réduisant le nombre de résultats de jointure intermédiaires et en minimisant l'impact du filtrage de clause WHERE sur l'exécution de la jointure.
Cohérence et standardisation
La nouvelle syntaxe est plus cohérente entre les différents fournisseurs de bases de données, en particulier Microsoft SQL Server, qui a rendu obsolète l'ancienne syntaxe de jointure externe mais pas la syntaxe de jointure interne. Cela permet de garantir la compatibilité et la portabilité des requêtes entre les bases de données.
Exemple
Supposons que vous ayez trois tables : Entreprise, Département et Employé, avec une relation hiérarchique entre elles. Pour récupérer toutes les entreprises, services et employés, et filtrer les services comptant au moins un employé, vous pouvez utiliser la requête suivante :
<code class="language-sql">SELECT * FROM Company LEFT JOIN ( Department INNER JOIN Employee ON Department.ID = Employee.DepartmentID ) ON Company.ID = Department.CompanyID</code>
Cette requête spécifie un LEFT JOIN entre Company et les tables Department et Employee jointes en interne. Il garantit que toutes les entreprises sont incluses, qu'elles aient des départements ou des employés. Les lignes des départements ou des employés qui ne correspondent pas auront des valeurs NULL dans les colonnes correspondantes.
Conclusion
Bien que l'ancienne et la nouvelle syntaxe pour les jointures internes dans SQL puissent produire les mêmes résultats, l'utilisation d'un LEFT JOIN dans la clause FROM est l'approche préférée. Il offre clarté, absence d'ambiguïté, performances améliorées, cohérence entre les fournisseurs de bases de données et une plus grande flexibilité dans la spécification des conditions de jointure et des conditions de filtrage des lignes.
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!