Maison > base de données > tutoriel mysql > Jointure à gauche ou plusieurs tables dans la clause FROM : quand dois-je utiliser la syntaxe SQL moderne ?

Jointure à gauche ou plusieurs tables dans la clause FROM : quand dois-je utiliser la syntaxe SQL moderne ?

Linda Hamilton
Libérer: 2025-01-20 11:16:08
original
460 Les gens l'ont consulté

Left Join vs. Multiple Tables in FROM Clause: When Should I Use the Modern SQL Syntax?

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

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

Dans la requête ci-dessus :

  • Le INNER JOIN entre Department et Employee garantit que seuls les départements avec des employés sont récupérés.
  • UNE JOINTURE GAUCHE entre les résultats de l'entreprise et de la jointure interne permet aux entreprises sans département d'être incluses dans le résultat final.

Autres avantages

En plus de la désambiguïsation, la syntaxe moderne présente d'autres avantages :

  • Génération de plans de requête améliorée : L'optimiseur de requêtes a une compréhension plus claire des opérations de jointure, ce qui lui permet de créer des plans de requête plus efficaces.
  • Plus facile à lire : La syntaxe moderne est plus intuitive et plus facile à comprendre, notamment pour les requêtes complexes.
  • Compatibilité : La syntaxe moderne est prise en charge dans la plupart des bases de données modernes, garantissant la compatibilité sur plusieurs plates-formes.

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!

source:php.cn
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