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 » ?
Jointure gauche SQL et jointure multi-table dans la clause FROM
: pourquoi la deuxième syntaxe
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 syntaxeLEFT 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 syntaxeLEFT 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 syntaxeLEFT 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!