Maison >base de données >tutoriel mysql >Jointures SQL : pourquoi utiliser « LEFT JOIN » avec des « INNER JOIN » imbriquées au lieu de plusieurs tables dans la clause « FROM » ?

Jointures SQL : pourquoi utiliser « LEFT JOIN » avec des « INNER JOIN » imbriquées au lieu de plusieurs tables dans la clause « FROM » ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-20 11:06:10417parcourir

SQL Joins: Why Use `LEFT JOIN` with Nested `INNER JOIN`s Instead of Multiple Tables in the `FROM` Clause?

Jointure gauche SQL et jointure multi-table dans la clause FROM : pourquoi la deuxième syntaxe

est recommandée

Bien que le dialecte SQL traditionnel autorise les jointures à la fois via les clauses WHERE et LEFT JOIN, il est crucial de comprendre les avantages de l'utilisation de la syntaxe LEFT JOIN, en particulier lors de l'exécution de jointures internes.

Éviter toute ambiguïté

Dans les bases de données modernes, la méthode traditionnelle de listage des tables à l'aide des conditions de la clause WHERE est obsolète. Cette syntaxe peut prêter à confusion lors de la combinaison de jointures internes et externes dans la même requête.

Exemple : connexion héritée ambiguë

Considérons l'exemple suivant :

<code class="language-sql">SELECT *
FROM Company, Department, Employee
WHERE Company.ID = Department.CompanyID
  AND Department.ID = Employee.DepartmentID</code>

Cette requête est conçue pour répertorier les entreprises, leurs services et leurs employés. Cependant, l'optimiseur de requêtes peut choisir de donner la priorité à la jointure interne entre les tables Department et Employee, ce qui entraîne l'exclusion des entreprises sans département.

Solution : syntaxe LEFT JOIN

La syntaxe

LEFT JOIN résout cette ambiguïté en spécifiant explicitement l'ordre de connexion. En plaçant la jointure interne entre parenthèses et en effectuant une jointure gauche à l'aide de la table company, la requête précédente devient :

<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 syntaxe garantit que toutes les entreprises sont incluses, même celles sans départements.

Contrôle et flexibilité supplémentaires

La syntaxe

LEFT JOIN fournit également un contrôle supplémentaire sur les conditions de jointure. Par exemple, la requête suivante filtre les départements dont le nom contient la lettre « X » :

<code class="language-sql">SELECT *
FROM Company
LEFT JOIN (
    Department INNER JOIN Employee ON Department.ID = Employee.DepartmentID
) ON Company.ID = Department.CompanyID AND Department.Name LIKE '%X%'</code>

Conclusion

La syntaxe

LEFT JOIN, ainsi que les jointures internes, offrent plusieurs avantages par rapport à la méthode traditionnelle de jointure de tables sur des lignes FROM. Il supprime toute ambiguïté, offre un meilleur contrôle et simplifie le processus d'optimisation des requêtes. Par conséquent, l'utilisation de LEFT JOIN et INNER JOIN est fortement recommandée dans les applications SQL modernes.

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