27th Nov 2023 10 minutes de lecture Les JOINs SQL expliqués : 5 exemples SQL INNER JOIN pour les débutants Martyna Sławińska sql join join jointures Table des matières Réunir des tables : Présentation des opérations SQL JOIN Exemples pratiques de INNER JOIN en SQL Exemple 1 : Lier des livres à des auteurs Exemple 2 : affectation de produits à des catégories Exemple 3 : Liste des médecins et des patients portant le même prénom Exemple 4 : Associer des personnes à des appartements convenables Exemple 5 : Jointure des tables Continents, Pays et Villes À vous de pratiquer les exemples de jointures internes en SQL Vous cherchez une explication claire des jointures en SQL ? Consultez ces cinq exemples de JOINTS INNER en SQL ! En SQL, INNER JOINs peut être un peu difficile à maîtriser pour les débutants. Mais une fois que vous aurez commencé à les utiliser, vous découvrirez qu'elles sont très utiles ! Nous allons examiner cinq exemples de SQL INNER JOINs. Mais tout d'abord, examinons rapidement l'importance des JOINs. Dans les bases de données relationnelles, les données sont organisées et stockées dans des tables. Chaque table représente un type d'information spécifique. Mais il arrive souvent que l'on doive analyser simultanément des données provenant de différentes tables. C'est là que les JOIN interviennent. Nous vous encourageons à vous entraîner à joindre des tables en suivant notre cours interactif. Les jointures en SQL cours interactif. Il comprend 93 exercices couvrant les sujets suivants : Types de JOIN SQL. JOINs multiples. Les auto-joints, c'est-à-dire la jonction d'une table avec elle-même. JOINsnon équitables. Alors, êtes-vous prêt à regarder quelques exemples de INNER JOIN? C'est parti ! Réunir des tables : Présentation des opérations SQL JOIN Les jointures en SQL Les jointures SQL permettent de combiner les données de deux tables ou plus en fonction des valeurs de colonnes correspondantes. Par exemple, vous pouvez fusionner les informations relatives aux clients avec les commandes qu'ils ont passées ou relier chaque produit à ses fournisseurs. Les jointures en SQL Les opérations SQL JOIN vous permettent de joindre des données provenant de différentes tables et d'en extraire des informations utiles pour votre cas d'utilisation spécifique. Consultez l'aide-mémoire SQL JOIN pour avoir une vue d'ensemble des différents types de JOIN. Un INNER JOIN en SQL combine des lignes de plusieurs tables en faisant correspondre les valeurs de leurs colonnes communes. Lorsque vous appliquez une INNER JOIN pour relier les données des clients à leurs commandes correspondantes, vous obtenez une liste des clients qui ont passé au moins une commande. Outre INNER JOIN, SQL propose également d'autres types de jointures : LEFT JOIN, RIGHT JOIN, et FULL JOIN. Ces jointures sont appelées OUTER JOINs. Contrairement à INNER JOIN, une opération OUTER JOIN peut lister les lignes des deux tables, même s'il n'y a pas de correspondance. Prenons un exemple pour mieux comprendre la nature des SQL INNER JOINs. Voici la table customers qui stocke les informations sur les clients : customer_idfirst_namelast_nameemail 1CoryCastillocc@email.com 2ElliePottsep@email.com 3JackGreerjg@email.com Et voici la table orders qui stocke toutes les commandes passées par les clients : order_idcustomer_idorder_dateorder_amount 2716/6/2023100.00 2827/7/2023150.00 2918/8/202320.00 La colonne commune (en rose) sur laquelle les tableaux customers et orders sont reliées est la colonne customer_id. Voici maintenant la requête : SELECT c.customer_id, c.email, o.order_date, o.order_amount FROM customers AS c INNER JOIN orders AS o ON c.customer_id = o.customer_id; Cette requête joint la table customers (alias AS c) et la table orders (alias AS o). Ces alias de table fournissent un moyen clair d'informer la base de données de la table source de chaque colonne (en utilisant la syntaxe table_alias.column_name). Ces alias sont utilisés dans la clause ON pour établir la colonne de jonction des tables. Nous les utilisons également dans l'instruction SELECT, où deux colonnes sont sélectionnées dans la table customers (c.customer_id and c.email) et deux autres dans la table orders (o.order_date and o.order_amount). Voici le résultat de la requête : customer_idemailorder_dateorder_amount 1cc@email.com6/6/2023100.00 2ep@email.com7/7/2023150.00 1cc@email.com8/8/202320.00 Vous pouvez observer que le client dont l'ID est 3 n'apparaît pas dans le tableau résultant. Ce client n'a pas encore passé de commande ; il n'y a donc pas d'enregistrement correspondant dans la table. orders dans la table. Le mot-clé INNER JOIN est interchangeable avec le mot-clé JOIN. En d'autres termes, lorsque vous utilisez JOIN, la base de données l'interprète comme une notation abrégée pour INNER JOIN. Pour en savoir plus sur les INNER JOIN, consultez notre article intitulé Qu'est-ce qu'une jointure interne en SQL ? Exemples pratiques de INNER JOIN en SQL Explorons quelques exemples SQL INNER JOIN adaptés aux débutants. Avant de vous lancer dans les exemples, consultez cet article sur la façon de pratiquer Les jointures en SQL. Exemple 1 : Lier des livres à des auteurs Vous disposez de deux tables qui stockent des informations sur les livres et les auteurs. Joignez ces tables pour obtenir la liste des livres et de leurs auteurs. Voici le tableau books table : book_idtitlepublication_yearauthor_id 1Frankenstein181822 2The Time Machine189523 3The Martian201124 42001: A Space Odyssey196825 5Dune196526 La colonne book_id identifie chaque livre de manière unique. La colonne author_id attribue un auteur à chaque livre. Voici le tableau authors tableau : author_idauthor_name 22Mary Shelley 23H. G. Wells 24Andy Weir 25Arthur C. Clarke 26Frank Herbert La colonne author_id identifie chaque auteur de manière unique. La colonne author_name stocke les noms complets des auteurs. Si vous souhaitez voir les titres des livres et les noms de leurs auteurs, vous pouvez joindre ces tableaux sur la base de leur colonne commune (la colonne author_id dans les deux tableaux). Il suffit de sélectionner title dans books et author_name dans authors: SELECT b.title, a.author_name FROM books AS b INNER JOIN authors AS a ON b.author_id = a.author_id; Voici le tableau obtenu : titleauthor_name FrankensteinMary Shelley The Time MachineH. G. Wells The MartianAndy Weir 2001: A Space OdysseyArthur C. Clarke DuneFrank Herbert Veuillez noter que chaque livre est associé à un auteur et que chaque auteur est associé à un livre, car il n'y a pas de valeurs en double dans la colonne commune author_id. Examinez l'exemple suivant pour voir ce qui se passe si la colonne commune contient des valeurs en double. Exemple 2 : affectation de produits à des catégories Vous disposez de deux tables qui stockent les produits et les catégories de produits. Joignez ces tables pour obtenir la liste des produits et de leurs catégories. Voici le tableau products table : product_idproduct_namecategory_id 1Apple22 2Orange22 3Potato23 4Carrot23 5Chocolate24 La colonne product_id identifie chaque produit de manière unique. La colonne category_id attribue une catégorie à chaque produit. Voici le tableau categories tableau : category_idcategory_name 22Fruits 23Vegetables 24Snacks La colonne category_id identifie chaque catégorie de manière unique. La colonne category_name stocke les noms complets des catégories. Si vous voulez voir les produits et leurs catégories, vous pouvez joindre ces tables sur la base de leur colonne commune, qui est la colonne category_id. Voici la requête : SELECT p.product_name, c.category_name FROM products AS p INNER JOIN categories AS c ON p.category_id = c.category_id; Voici le tableau résultant : product_namecategory_name AppleFruits OrangeFruits PotatoVegetables CarrotVegetables ChocolateSnacks Les catégories dont les ID sont 22 et 23 sont affectées à deux produits chacune ; leurs noms apparaissent deux fois dans le tableau de sortie. Exemple 3 : Liste des médecins et des patients portant le même prénom Vous disposez de deux tables qui stockent des informations sur les médecins et les patients. Joignez ces tables pour obtenir la liste des médecins et des patients qui partagent le même prénom. Voici le tableau doctors table : doctor_idfirst_namelast_name 1SamanthaMonroe 2MelvinFerrell 3AlbieBlake 4RoseBernard 5LouiPeterson La colonne doctor_id identifie chaque médecin de manière unique. Les deux autres colonnes contiennent les noms et prénoms des médecins. Et voici le tableau patients tableau : patient_idfirst_namelast_name 23BenWoodward 24SamanthaThomson 25KateDonovan 26AlbieVasquez 27LouiChen La colonne patient_id identifie chaque patient de manière unique. Les deux autres colonnes contiennent les noms et prénoms des patients. Si vous voulez voir la liste des médecins et des patients qui partagent le même prénom, vous pouvez joindre ces tableaux en vous basant sur la colonne first_name. SELECT d.*, p.* FROM doctors AS d INNER JOIN patients AS p ON d.first_name = p.first_name; Veuillez noter que d.* définit toutes les colonnes de la table doctors et p.* définit toutes les colonnes de la table patients table. Voici le tableau résultant : doctor_idfirst_namelast_namepatient_idfirst_namelast_name 1SamanthaMonroe24SamanthaThomson 3AlbieBlake26AlbieVasquez 5LouiPeterson27LouiChen Grâce à l'opération INNER JOIN, vous ne pouvez lister que les paires de médecins et de patients dont les prénoms sont identiques. Exemple 4 : Associer des personnes à des appartements convenables Vous disposez de deux tables qui stockent des informations sur les appartements disponibles à la location et sur les personnes qui recherchent des appartements correspondant à leur fourchette de prix. Associez ces tables pour voir quels appartements peuvent être loués par telle ou telle personne. Voici le tableau apartments table : apartment_idrent 11000 2700 3500 La colonne apartment_id identifie chaque appartement de manière unique. La colonne rent indique le montant du loyer mensuel. Et voici la table persons tableau : person_idemailmax_rent 23ab@email.com900 24cd@email.com600 25ef@email.com3000 La colonne person_id identifie chaque personne qui cherche un appartement à louer. La colonne email stocke leurs adresses électroniques et la colonne max_rent stocke le montant maximum du loyer mensuel qu'ils sont en mesure de payer pour l'appartement. Si vous souhaitez savoir quels appartements peuvent être loués par quelle personne, vous pouvez relier ces tables sur la base des colonnes rent et max_rent: SELECT p.person_id, p.email, a.apartment_id, a.rent AS apartment_rent FROM apartments AS a INNER JOIN persons AS p ON a.rent < p.max_rent; Ici, la correspondance doit être établie entre la colonne "loyer" du tableau apartments et la colonne max_rent de la table persons où rent < max_rent. Voici le tableau résultant : person_idemailapartment_idapartment_rent 25ef@email.com11000 23ab@email.com2700 25ef@email.com2700 23ab@email.com3500 24cd@email.com3500 25ef@email.com3500 En utilisant la clause ON avec la condition contenant le signe <, plusieurs lignes de la table ont été affectées à plusieurs lignes de la table. apartments ont été affectées à plusieurs lignes du tableau persons et vice versa. Vous pouvez ainsi voir quels appartements conviennent à telle ou telle personne. Exemple 5 : Jointure des tables Continents, Pays et Villes Cette fois, vous disposez de trois tables qui stockent des informations sur les continents, les pays et les villes. Joignez ces tables pour savoir quelle ville appartient à quel pays et quel pays appartient à quel continent. Voici le tableau continents qui contient tous les continents : continent_idcontinent_name 1Asia 2Africa 3North America 4South America 5Antarctica 6Europe 7Australia La colonne continent_id identifie chaque continent de manière unique. La colonne continent_name contient le nom complet du continent. Voici le tableau countries qui stocke les pays sélectionnés : country_idcountry_namecontinent_id 23United States3 24Brazil4 25South Africa2 26Japan1 27Poland6 La colonne country_id identifie chaque pays de manière unique. La colonne country_name stocke son nom complet. La colonne continent_id stocke le continent sur lequel le pays est situé. Voici le tableau cities qui stocke les villes sélectionnées : city_idcity_namecountry_id 33Rio de Janeiro24 34New York23 35Tokyo26 36Warsaw27 37Cape Town25 La colonne city_id identifie chaque ville de manière unique. La colonne city_name stocke son nom complet. La colonne country_id stocke le pays dans lequel la ville est située. Si vous voulez voir quelles villes, quels pays et quels continents vont ensemble, vous pouvez relier ces trois tableaux sur la base de leurs colonnes communes : SELECT cont.continent_name, coun.country_name, ci.city_name FROM continents AS cont INNER JOIN countries AS coun ON cont.continent_id = coun.continent_id INNER JOIN cities AS ci ON coun.country_id = ci.country_id; Le tableau continent est reliée à la table countries sur leur colonne commune (continent_id). Et le tableau countries est jointe à la table cities sur leur colonne commune (country_id). Voici le tableau résultant : continent_namecountry_namecity_name AsiaJapanTokyo AfricaSouth AfricaCape Town North AmericaUnited StatesNew York South AmericaBrazilRio de Janeiro EuropePolandWarsaw Les trois tables sont jointes sur leurs colonnes communes et l'instruction SELECT répertorie les noms des continents, des pays et des villes en fonction de la jointure entre les colonnes ID. Consultez cet article sur la jointure de trois tables ou plus en SQL pour obtenir d'autres exemples de jointures entre plusieurs tables. À vous de pratiquer les exemples de jointures internes en SQL Tout au long de cet article, nous avons approfondi les subtilités de INNER JOIN en SQL, des concepts de base aux scénarios plus avancés. Nous avons utilisé diverses conditions JOIN et même joint trois tables. Comme nous l'avons vu, la puissance de INNER JOIN réside dans sa capacité à relier de manière transparente des ensembles de données, ce qui nous permet d'extraire des informations précieuses. Avez-vous besoin d'autres exemples SQL INNER JOIN? Essayez tous les types de JOIN en suivant notre cours sur Les jointures en SQL que nous avons mentionné plus haut. Vous obtiendrez tous les exercices pratiques dont vous avez besoin pour vous sentir à l'aise dans l'écriture de JOINs. Bonne chance ! Tags: sql join join jointures