4th Jul 2022 7 minutes de lecture Quelle est la différence entre avoir plusieurs tables dans FROM et utiliser JOIN ? Kateryna Koidan sql apprendre sql jointures Table des matières Joindre des tables en les énumérant dans FROM Joindre des tables à l'aide du mot-clé JOIN Pourquoi utiliser la nouvelle syntaxe pour les jointures SQL ? Les conditions de jointure sont distinctes des conditions de filtrage Il est plus facile de joindre plusieurs tables Les LEFT / RIGHT / FULL JOIN sont plus simples Éviter les CROSS JOIN accidentels Il est temps d'apprendre la nouvelle syntaxe pour Les jointures en SQL! Quelle est votre approche de la jonction des tables en SQL ? Dans cet article, nous abordons deux approches et expliquons pourquoi de nombreux développeurs SQL ont une nette préférence pour JOIN. Préférez-vous lister plusieurs tables dans FROM et utiliser WHERE pour définir les conditions de jointure ? Ou bien utilisez-vous le mot-clé JOIN ? SQL supporte les deux, mais il existe des différences significatives entre eux. Examinons chacune d'entre elles en détail, puis expliquons pourquoi JOIN est généralement préférable. Joindre des tables en les énumérant dans FROM Disons que nous gérons un magasin de jouets et que nous avons deux tables de base de données que nous voulons joindre : toys et sales. Jouets idnamebrandprice 1BumblebeeTransformers14.99 2Optimus PrimeTransformers19.99 3Lightning McQueenDisney Cars23.97 4RamoneDisney Cars20.99 5Wonder WomanBarbie39.99 6Princess LeiaBarbie99.99 7Wizard of Oz: GlindaBarbie43.95 Ventes idtoy_idemployee_iddatequantity 1532020-07-011 2112020-07-011 3312020-07-021 4632020-07-031 5232020-07-031 Nous pouvons simplement lister les deux tables dans la clause FROM et indiquer dans la clause WHERE que le id de la table toy doit correspondre au site toy_id de la table sales de la table : SELECT t.id, t.name, t.brand, t.price, s.quantity, s.date FROM toys t, sales s WHERE t.id = s.toy_id; Nous obtenons le résultat suivant : idnamebrandpricequantitydate 1BumblebeeTransformers14.9912020-07-01 2Optimus PrimeTransformers19.9912020-07-03 3Lightning McQueenDisney Cars23.9712020-07-02 5Wonder WomanBarbie39.9912020-07-01 6Princess LeiaBarbie99.9912020-07-03 Tout a fonctionné comme prévu : nous avons joint deux tables et obtenu les résultats escomptés. Il s'agit là d'une solution efficace pour joindre des tables en SQL. Cependant, elle utilise une ancienne syntaxe qui était courante avant que la norme SQL-92 n'introduise le mot-clé JOIN. Voyons maintenant comment nous pouvons obtenir le même résultat en utilisant une approche moderne de la jonction de tables. Joindre des tables à l'aide du mot-clé JOIN Nous pouvons utiliser la requête suivante avec le mot-clé JOIN pour obtenir le même résultat : SELECT t.id, t.name, t.brand, t.price, s.quantity, s.date FROM toys t JOIN sales s ON t.id = s.toy_id; Cette syntaxe a été introduite dans la norme SQL-92. Ici, nous n'avons qu'une seule table dans la clause FROM ; la table que nous voulons joindre est listée dans la clause JOIN. Ensuite, nous avons le mot-clé ON pour spécifier les colonnes à utiliser pour joindre ces tables. Le résultat de cette requête est le même que ci-dessus. Toutefois, cette approche présente un certain nombre d'avantages qui la rendent plus répandue parmi les praticiens de SQL. Si vous préférez utiliser l'ancienne syntaxe pour joindre des tables, consultez les arguments suivants. Ils pourraient vous faire changer d'avis. Pourquoi utiliser la nouvelle syntaxe pour les jointures SQL ? Commençons par préciser qu'en termes de performances, il n'y a aucune différence entre les deux syntaxes. L'utilisation du mot-clé JOIN n'est pas seulement une norme formelle de nos jours, c'est aussi une pratique courante parmi les utilisateurs de SQL. Alors, quels sont les avantages de l'utilisation de la clause JOIN ? Les conditions de jointure sont distinctes des conditions de filtrage Lorsque vous utilisez l'ancienne syntaxe, vos conditions de jointure et vos conditions de filtrage sont physiquement regroupées dans la clause WHERE. Cela peut prêter à confusion. Par exemple, disons que nous voulons voir uniquement les ventes du 3 juillet. Nous devons ajouter une condition supplémentaire à la clause WHERE : SELECT t.id, t.name, t.brand, t.price, s.quantity, s.date FROM toys t, sales s WHERE t.id = s.toy_id AND s.date = '2020-07-03'; Nous avons maintenant deux conditions dans WHERE, mais seule l'une d'entre elles est une véritable condition de filtrage. L'autre est juste utilisée pour spécifier les colonnes sur lesquelles joindre les tables. Avec le mot-clé JOIN, les conditions de jointure sont séparées des conditions de filtrage : SELECT t.id, t.name, t.brand, t.price, s.quantity, s.date FROM toys t JOIN sales s ON t.id = s.toy_id WHERE s.date = '2020-07-03'; Ici, nous spécifions la condition de jointure dans ON et utilisons WHERE pour filtrer les résultats. Les deux requêtes produiront le même résultat, mais la nouvelle syntaxe indique clairement où vous joignez les tables et où vous filtrez les résultats. Il est plus facile de joindre plusieurs tables Souvent, vous aurez besoin de joindre plusieurs tables avec SQL. Par exemple, disons que nous voulons joindre la table employees à la table toys et sales afin de savoir qui a vendu chaque jouet. Employés idname 1Rob Stevens 2Jane White 3Sofia Clark Avec l'ancienne syntaxe, nous aurions la requête suivante : SELECT t.id, t.name, t.brand, t.price, s.quantity, s.date, e.name AS employee FROM toys t, sales s, employees e WHERE t.id = s.toy_id AND e.id = s.employee_id; Pour joindre les trois mêmes tables avec la syntaxe JOIN, nous utiliserions cette requête : SELECT t.id, t.name, t.brand, t.price, s.quantity, s.date, e.name AS employee FROM toys t JOIN sales s ON t.id = s.toy_id JOIN employees e ON e.id = s.employee_id; Le résultat est le même : idnamebrandpricequantitydateemployee 1BumblebeeTransformers14.9912020-07-01Rob Stevens 2Optimus PrimeTransformers19.9912020-07-03Sofia Clark 3Lightning McQueenDisney Cars23.9712020-07-02Rob Stevens 5Wonder WomanBarbie39.9912020-07-01Sofia Clark 6Princess LeiaBarbie99.9912020-07-03Sofia Clark La "chaîne" de tables que nous voulons joindre est plus visible dans la nouvelle syntaxe, où nous joignons d'abord deux tables sur des colonnes spécifiques, puis nous joignons la troisième table en utilisant une autre condition de jointure. Avec l'ancienne syntaxe, les trois tables sont listées ensemble dans FROM, puis les deux conditions de jointure sont spécifiées (dans n'importe quel ordre) dans WHERE. Dans cette syntaxe, il est vite difficile de savoir quelle condition correspond à quelle jointure, surtout si l'on doit joindre plus de trois tables. Les LEFT / RIGHT / FULL JOIN sont plus simples La syntaxe JOIN rend tous les types de jointures externes très simples. Vous pouvez effectuer des jointures (externes) de gauche, des jointures (externes) de droite ou des jointures (externes) complètes en utilisant simplement les mots-clés respectifs (LEFT JOIN, RIGHT JOIN ou FULL JOIN). Disons que nous voulons joindre les tables toys et sales afin que tous les jouets soient affichés dans le résultat, même s'il n'y a pas eu de ventes pour un jouet pendant la période donnée. Vous pouvez effectuer cette jointure facilement dans n'importe quelle base de données en utilisant simplement LEFT JOIN: SELECT t.id, t.name, t.brand, t.price, s.quantity, s.date FROM toys t LEFT JOIN sales s ON t.id = s.toy_id; Le résultat comprendra tous les jouets et les informations de vente correspondantes, le cas échéant : idnamebrandpricequantitydate 5Wonder WomanBarbie39.9912020-07-01 1BumblebeeTransformers14.9912020-07-01 3Lightning McQueenDisney Cars23.9712020-07-02 6Princess LeiaBarbie99.9912020-07-03 2Optimus PrimeTransformers19.9912020-07-03 4RamoneDisney Cars20.99NULLNULL 7Wizard of Oz: GlindaBarbie43.95NULLNULL Si vous ne connaissez pas les LEFT JOIN, lisez ce guide complet sur la jointure à gauche de plusieurs tables. Et qu'en est-il de l'ancienne syntaxe ? C'est compliqué. Certaines bases de données autorisent certaines astuces pour joindre des tables à gauche sans utiliser le mot-clé JOIN, mais il n'existe pas de solution cohérente qui fonctionne dans tous les cas. Par exemple, dans Oracle, vous pouvez utiliser l'opérateur (+) pour effectuer une jointure à gauche : SELECT t.id, t.name, t.brand, t.price, s.quantity, s.day FROM toys t, sales s WHERE t.id = s.toy_id (+); Cependant, cette syntaxe ne fonctionne pas dans d'autres bases de données. Éviter les CROSS JOIN accidentels Un autre problème courant lié à la jointure de tables avec FROM est la CROSS JOIN accidentelle. Si vous omettez une condition de jointure dans WHERE, vous obtiendrez toutes les lignes de la première table combinées à toutes les lignes de la deuxième table. Ainsi, le nombre de lignes dans le jeu de résultats sera la multiplication du nombre de lignes dans chaque table. Une telle erreur peut être délicate à détecter et à déboguer. En même temps, lorsque vous utilisez la norme SQL-92 pour joindre des tables, vous obtenez une erreur de syntaxe si vous omettez la condition de jonction. Bien entendu, vous pouvez effectuer une jointure croisée de vos tables dans la nouvelle syntaxe, mais uniquement si vous utilisez explicitement le mot clé correspondant (CROSS JOIN). Il est temps d'apprendre la nouvelle syntaxe pour Les jointures en SQL! La plupart des praticiens SQL s'accordent à dire que la nouvelle syntaxe est plus lisible une fois qu'on s'y est habitué. Nous espérons que vous êtes également convaincu que l'approche moderne de la jointure des tables en SQL mérite votre attention. LearnSQL propose un cours complet sur Les jointures en SQL qui comprend 93 exercices interactifs. Vous aurez l'occasion de pratiquer les jointures internes, tous les types de jointures externes, les jointures non équitables et les auto-joints. Outre les exercices, vous trouverez peut-être utile de rafraîchir vos connaissances sur Les jointures en SQL grâce à nos guides destinés aux débutants : Comment apprendre Les jointures en SQL Comment pratiquer Les jointures en SQL Apprendre les JOINs avec des exemples réels de SQL Bon apprentissage ! Tags: sql apprendre sql jointures