Syntaxe SQL moderne : LEFT JOIN et sélection de plusieurs tables dans la clause FROM
SQL fournit deux syntaxes de connexion de table différentes : (1) Répertoriez toutes les tables dans la clause FROM et utilisez la clause WHERE pour spécifier les conditions de connexion ; (2) Utilisez la syntaxe LEFT JOIN et INNER JOIN ; Bien que la plupart des dialectes SQL acceptent les deux syntaxes, cette dernière est préférable, notamment lors de l'exécution de jointures internes.
Syntaxe traditionnelle : Ambiguïté des jointures externes
La syntaxe traditionnelle (répertorier les tables dans la clause FROM) est sujette à l'ambiguïté lors de l'utilisation à la fois d'INNER JOIN et d'OUTER JOIN dans la même requête. Prenons 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écupérer les entreprises, leurs services et leurs employés, y compris les entreprises sans département. Toutefois, une ambiguïté se produit lorsque la clause WHERE spécifie à la fois des jointures internes et externes. En fonction de la logique de l'optimiseur de requête et des paramètres du moteur de base de données, la requête peut exclure les entreprises dont les services sont manquants, ce qui entraîne des résultats incorrects.
Grammaire moderne : clarté et contrôle
La syntaxe moderne utilisant LEFT JOIN et INNER JOIN supprime cette ambiguïté. Il fournit un contrôle explicite sur la manière dont les tables sont mises en correspondance en spécifiant la condition de jointure sur une seule ligne. Dans l'exemple ci-dessus, l'utilisation d'une syntaxe moderne résout ce problème :
<code class="language-sql">SELECT * FROM Company LEFT JOIN ( Department INNER JOIN Employee ON Department.ID = Employee.DepartmentID ) ON Company.ID = Department.CompanyID</code>
Dans la requête ci-dessus :
Autres avantages
En plus de la désambiguïsation, la syntaxe moderne présente d'autres avantages :
Dépréciation de la syntaxe traditionnelle
En raison des avantages de la syntaxe moderne, certains fournisseurs (tels que Microsoft) ont déprécié la syntaxe de jointure externe traditionnelle (en utilisant la clause WHERE) dans les versions plus récentes de leur logiciel de base de données.
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!