13th Oct 2023 26 minutes de lecture Jointures SQL : 12 questions pratiques avec des réponses détaillées Tihomir Babic sql join join jointures pratique sql Table des matières Liste des exercices INNER JOIN Jeu de données 1 Exercice 1 : Liste de tous les livres et de leurs auteurs Exercice 2 : Liste des auteurs et des livres publiés après 2005 Exercice 3 : afficher les livres adaptés dans les 4 ans et dont la cote est inférieure à celle de l'adaptation JOINT DE GAUCHE Exercice 4 : Afficher tous les livres et leurs adaptations (le cas échéant) Exercice 5 : Afficher tous les livres et leurs adaptations cinématographiques JONCTION À DROITE Exercice 6 : Afficher tous les livres avec leurs critiques (le cas échéant) JOINTURE COMPLÈTE Exercice 7 : Lister tous les livres et tous les auteurs Jointure de 3 tables ou plus Jeu de données 2 Exercice 8 : Afficher les produits de moins de 150 calories et leur rayon Exercice 9 : Liste de tous les produits avec leurs producteurs, leurs départements et leurs glucides Exercice 10 : Afficher tous les produits, les prix, les producteurs et les départements Auto-jonction Ensemble de données 3 Exercice 11 : Liste de tous les travailleurs et de leurs superviseurs directs Jointures non équitables Ensemble de données 4 Exercice 12 : afficher les voitures ayant un kilométrage supérieur à celui d'une voiture spécifique Les jointures en SQL C'est en forgeant qu'on devient forgeron. Plus d'entraînement ? Encore plus parfait ! Dans cet article, nous avons approfondi notre cours sur les jointures SQL et nous vous avons donné 12 exercices de jointure à résoudre. Mais ne vous inquiétez pas - tous les exercices ont des solutions et des explications. Si vous êtes bloqué, l'aide est là ! Après tout, ce cours est fait pour pratiquer et apprendre. Les jointures SQL peuvent être délicates. Il ne s'agit pas seulement de la syntaxe, mais aussi de savoir quelles jointures utiliser dans quels scénarios. Les jointures sont utilisées pour combiner des données provenant de deux tables ou plus en SQL. Les tables peuvent être jointes de plusieurs façons et, selon les tables, chaque façon de les joindre peut donner un résultat complètement différent. Il n'y a pas d'autre moyen d'apprendre cela que la pratique. Oui, vous pouvez lire des explications et des utilisations typiques des jointures SQL. Cela aide, c'est certain ! Mais la pratique s'appuie sur la résolution de problèmes et la répétition, ce qui permet d'assimiler les connaissances. Plus vous pratiquez, plus vous avez de chances que les problèmes de données réels que vous aurez à résoudre soient similaires ou complètement identiques à ce que vous avez déjà fait ! Et c'est ce que nous allons faire dans cet article ! Nous vous montrerons des exercices pour des utilisations basiques et plus avancées des jointures SQL. Si vous les appréciez, vous apprécierez d'autant plus notre cours. Les jointures en SQL car tous les exercices sont tirés de ce cours. Au total, le cours vous propose 93 exercices sur les jointures SQL. Ils couvrent des sujets allant des types de jointures en SQL au filtrage des données, en passant par la jointure de plus de deux tables, l'auto-jointure d'une table et l'utilisation de jointures non égales. OK, présentons les ensembles de données et commençons les exercices, d'accord ? N'hésitez pas à vous aider de l'aide-mémoire SQL JOIN au fur et à mesure que vous avancez. Liste des exercices Voici la liste de tous les exercices de l'article : Exercice 1 : Liste de tous les livres et de leurs auteurs Exercice 2 : Liste des auteurs et des livres publiés après 2005 Exercice 3 : Afficher les livres adaptés dans les 4 ans et moins bien notés que l'adaptation Exercice 4 : Afficher tous les livres et leurs adaptations (le cas échéant) Exercice 5 : Afficher tous les livres et leurs adaptations cinématographiques Exercice 6 : Afficher tous les livres avec leurs critiques (le cas échéant) Exercice 7 : Liste de tous les livres et de tous les auteurs Exercice 8 : Afficher les produits de moins de 150 calories et leur rayon Exercice 9 : Liste de tous les produits avec leurs producteurs, départements et glucides Exercice 10 : Afficher tous les produits, les prix, les producteurs et les départements Exercice 11 : Liste de tous les travailleurs et de leurs superviseurs directs Exercice 12 : Afficher les voitures dont le kilométrage est supérieur à celui d'une voiture spécifique INNER JOIN INNER JOIN est un type de jointure SQL qui renvoie uniquement les lignes correspondantes des tables jointes. Pour vous montrer comment cela fonctionne, nous allons utiliser le jeu de données 1 du cours. Jeu de données 1 L'ensemble de données se compose de quatre tables : author, book, adaptation, et book_review. Le premier tableau présente les données relatives à l'auteur dans les colonnes suivantes : id - L'identifiant unique de l'auteur dans la base de données. name - Le nom de l'auteur. birth_year - L'année de naissance de l'auteur. death_year - L'année de décès de l'auteur (le champ est vide si l'auteur est encore en vie). Voici les premières lignes de la table : idnamebirth_yeardeath_year 1Marcella Cole1983NULL 2Lisa Mullins18911950 3Dennis Stokes19351994 4Randolph Vasquez19572004 5Daniel Branson19651990 ………… La deuxième table, bookprésente des informations sur les livres. Les colonnes sont les suivantes id - L'ID d'un livre donné. author_id - L'ID de l'auteur qui a écrit ce livre. title - Le titre du livre. publish_year - L'année de publication du livre. publishing_house - Le nom de la maison d'édition qui a imprimé le livre. note - La note moyenne du livre. Il s'agit des cinq premières lignes : idauthor_idtitlepublish_yearpublishing_houserating 1NULLSoulless girl2008Golden Albatros4.3 2NULLWeak Heart1980Diarmud Inc.3.8 34Faith Of Light1995White Cloud Press4.3 4NULLMemory Of Hope2000Rutis Enterprises2.7 56Warrior Of Wind2005Maverick4.6 ……………… Le tableau adaptation comporte les colonnes suivantes : book_id - L'ID du livre adapté. type - Le type d'adaptation (par exemple, film, jeu, pièce de théâtre, comédie musicale). title - Le nom de cette adaptation. release_year - L'année de création de l'adaptation. rating - La note moyenne de l'adaptation. Voici un aperçu des données de ce tableau : book_idtypetitlerelease_yearrating 1movieGone With The Wolves: The Beginning20083 3movieCompanions Of Tomorrow20014.2 5movieHomeless Warrior20084 2movieBlacksmith With Silver20144.3 4moviePatrons And Bearers20043.2 …………… Le tableau final est le suivant book_review. Il se compose des colonnes suivantes : book_id - L'ID d'un livre chroniqué. review - Le résumé de la critique. author - Le nom de l'auteur de la critique. Voici les données : book_idreviewauthor 1An incredible bookSylvia Jones 1Great, although it has some flawsJessica Parker 2Dennis Stokes takes the reader for a ride full of emotionsThomas Green 3Incredible craftsmanship of the authorMartin Freeman 4Not the best book by this authorJude Falth 5Claudia Johnson at her best!Joe Marqiz 6I cannot recall more captivating plotAlexander Durham Exercice 1 : Liste de tous les livres et de leurs auteurs Exercice : Affichez le nom de chaque auteur avec le titre du livre qu'il a écrit et l'année de publication de ce livre. Solution : SELECT name, title, publish_year FROM author JOIN book ON author.id = book.author_id; Explication de la solution : La requête sélectionne le nom de l'auteur, le titre du livre et son année de publication. Il s'agit de données provenant des deux tableaux : author et book. Nous pouvons accéder aux deux tables en utilisant INNER JOIN. La requête renvoie uniquement les lignes dont les valeurs correspondent (valeurs qui satisfont à la condition de jointure) dans les deux tables. Nous référençons d'abord la table author dans la clause FROM. Ensuite, nous ajoutons la clause JOIN (qui peut également s'écrire INNER JOIN en SQL) et référençons la table book. Les tables sont jointes sur la colonne commune. Dans ce cas, il s'agit de id de la table author et author_id de la table book. Nous voulons joindre les lignes où ces colonnes partagent la même valeur. Pour ce faire, nous utilisons la clause ON et spécifions les noms des colonnes. Nous indiquons également le nom de la table avant chaque colonne afin que la base de données sache où chercher. C'est principalement parce qu'il y a une colonne id dans les deux tables, mais nous voulons que la colonne id ne provienne que de la table author mais nous voulons que la colonne d'identification soit uniquement celle de la table En faisant référence au nom de la table, la base de données saura de quelle table nous avons besoin pour cette colonne. Résultat de la solution : Voici le résultat de la solution. Nous avons obtenu toutes ces données en joignant deux tables : nametitlepublish_year Marcella ColeGone With The Wolves2005 Lisa MullinsCompanions And Officers1930 Dennis StokesBlacksmith With Silver1984 Randolph VasquezFaith Of Light1995 Michael RostkovskyWarrior Of Wind2005 ……… Exercice 2 : Liste des auteurs et des livres publiés après 2005 Exercice : Affichez le nom de chaque auteur avec le titre du livre qu'il a écrit et l'année de publication de ce livre. N'indiquez que les livres publiés après 2005. Solution : SELECT name, title, publish_year FROM author JOIN book ON author.id = book.author_id WHERE publish_year > 2005; Explication de la solution : Cet exercice et sa solution sont presque les mêmes que le précédent. En effet, la requête sélectionne les mêmes colonnes et joint les tables de la même manière que précédemment. La différence est que l'exercice nous demande maintenant de n' afficher que les livres publiés après 2005. Cela nécessite de filtrer la sortie, ce que nous faisons à l'aide de la clause WHERE. WHERE est une clause qui accepte les conditions utilisées pour filtrer les données. Elle est écrite après avoir joint les tables. Dans notre exemple, nous filtrons en référençant la colonne publish_year après WHERE et en utilisant l'opérateur de comparaison "supérieur à" (>) pour trouver les années postérieures à 2005. Résultat de la solution : Le résultat ne montre qu'un seul livre publié après 2005. nametitlepublish_year Darlene LyonsTemptations In Nature2007 Exercice 3 : afficher les livres adaptés dans les 4 ans et dont la cote est inférieure à celle de l'adaptation Exercice : Pour chaque livre, indiquez son titre, le titre de l'adaptation, l'année d'adaptation et l'année de publication. N'incluez que les livres dont la note est inférieure à celle de l'adaptation correspondante. En outre, n'indiquez que les livres pour lesquels une adaptation a été publiée dans les quatre ans suivant la publication du livre. Renommez la colonne title du tableau book en book_title et la colonne title du tableau adaptation en adaptation_title. Solution : SELECT book.title AS book_title, adaptation.title AS adaptation_title, book.publish_year, adaptation.release_year FROM book JOIN adaptation ON book.id = adaptation.book_id WHERE adaptation.release_year - book.publish_year <= 4 AND book.rating < adaptation.rating; Explication de la solution : Commençons par expliquer la solution à partir des clauses FROM et JOIN. Les colonnes que nous devons montrer proviennent des tableaux book et adaptation. Nous faisons référence à la première table dans FROM et à la seconde dans JOIN. Dans la clause ON, nous égalisons les deux colonnes d'ID de livre et spécifions la table de chaque colonne. Il s'agit de la même chose que précédemment, mais avec des noms de table et de colonne différents. Nous devons maintenant sélectionner les colonnes requises. Le problème ici est qu'il y a une colonne title dans les deux tables. Pour éviter toute ambiguïté, la meilleure pratique consiste à faire référence au nom de la table avant chaque colonne dans SELECT. Remarque : cette pratique n'est obligatoire que pour les colonnes ambiguës. Cependant, c'est une bonne idée de le faire pour toutes les colonnes ; cela améliore la lisibilité du code et l'approche reste cohérente. Après avoir sélectionné les colonnes, nous devons renommer certaines d'entre elles. Pour ce faire, nous utilisons le mot-clé AS et écrivons ensuite un nouveau nom de colonne. Ainsi, une colonne title devient book_title, l'autre adaptation_title. Le fait de donner des alias aux noms de colonnes permet également de se débarrasser de toute ambiguïté. Nous devons maintenant filtrer les résultats. La première condition est que l'adaptation doit être publiée quatre ans ou moins après le livre. Nous utilisons à nouveau WHERE et déduisons simplement l'année de publication du livre de l'année de sortie de l'adaptation. Nous disons ensuite que la différence doit être inférieure ou égale à (<=) 4. Nous devons également ajouter la deuxième condition, à savoir que le livre soit moins bien noté que l'adaptation. C'est simple ! La question implique que la première et la deuxième condition doivent être remplies. L'indice se trouve dans AND, un opérateur logique que nous utilisons pour ajouter la deuxième condition. Ici, il utilise l'opérateur "moins de" (<) pour comparer les deux notes. Résultat de la solution : Le résultat montre trois paires livre-adaptation qui remplissent les conditions. book_titleadaptation_titlepublish_yearrelease_year Memory Of HopePatrons And Bearers20002004 Music At The LakeMusic At The Lake20042007 Companion Of TomorrowLighting Faith19491952 JOINT DE GAUCHE Maintenant que vous avez compris l'essentiel de INNER JOIN, passons à LEFT JOIN. Il s'agit d'un type de jointure externe qui renvoie toutes les colonnes du tableau de gauche (le premier) et uniquement les lignes correspondantes du tableau de droite (le second). S'il y a des données non correspondantes, elles sont affichées à l'adresse NULL. Pour en savoir plus, consultez notre article sur le LEFT JOIN. Exercice 4 : Afficher tous les livres et leurs adaptations (le cas échéant) Exercice : Affichez le titre de chaque livre ainsi que le titre de son adaptation et la date de sortie. Affichez tous les livres, qu'ils aient ou non fait l'objet d'une adaptation. Solution : SELECT book.title, adaptation.title, adaptation.release_year FROM book LEFT JOIN adaptation ON book.id = adaptation.book_id; Explication de la solution : Nous sélectionnons d'abord les colonnes nécessaires dans les deux tableaux. Ensuite, nous joignons book (la table de gauche) avec adaptation (la table de droite) à l'aide de LEFT JOIN. Vous voyez que la syntaxe de jointure SQL est la même pour INNER JOIN. La seule chose qui change est le mot-clé de jointure. Remarque : SQL accepte à la fois LEFT JOIN et LEFT OUTER JOIN. Il s'agit de la même commande. Résultat de la solution : L'instantané de sortie montre les données requises, certaines d'entre elles étant affichées sous la forme NULL. Il s'agit des livres sans l'adaptation. titletitle-2release_year Soulless girlGone With The Wolves: The Beginning2008 Faith Of LightCompanions Of Tomorrow2001 Warrior Of WindHomeless Warrior2008 ……… Guarding The EmperorNULLNULL Blacksmith With SilverNULLNULL ……… Exercice 5 : Afficher tous les livres et leurs adaptations cinématographiques Exercice : Affichez tous les livres avec leurs adaptations cinématographiques. Sélectionnez le titre de chaque livre, le nom de sa maison d'édition, le titre de son adaptation et le type d'adaptation. Conservez les livres sans adaptation dans le résultat. Solution : SELECT book.title, publishing_house, adaptation.title, adaptation.type FROM book LEFT JOIN adaptation ON book.id = adaptation.book_id WHERE type = 'movie' OR type IS NULL; Explication de la solution : La question demande d'afficher toutes les lignes, même celles qui ne comportent pas d'adaptations. Il est possible qu'il y ait des livres sans adaptations, nous utilisons donc LEFT JOIN. Nous sélectionnons d'abord le titre du livre, sa maison d'édition, le titre de l'adaptation et son type. Ensuite, nous joignons book (la table de gauche) avec adaptation (la table de droite) en utilisant LEFT JOIN. Nous joignons les tables sur l'ID du livre. Tous les livres qui ne remplissent pas les conditions auront NULLs comme titre et type d'adaptation. Nous filtrons les données à l'aide de WHERE. La première condition est que le type d'adaptation doit être un film, nous égalisons donc la colonne type avec un film en utilisant le signe égal (=). Remarque : lorsque des données textuelles sont utilisées dans la condition WHERE, elles doivent être placées entre guillemets simples (''). La deuxième condition de filtrage est ajoutée à l'aide de l'opérateur logique OR. Elle indique que le type peut également être NULL s'il ne s'agit pas d'un film. L'exercice nous demande de conserver dans les résultats les livres qui n'ont pas été adaptés. Résultat de la solution : Voici l'instantané du résultat. Vous pouvez voir qu'il ne montre que les livres adaptés en films ou non adaptés du tout. titlepublishing_housetitle-2type Soulless girlGolden AlbatrosGone With The Wolves: The Beginningmovie Faith Of LightWhite Cloud PressCompanions Of Tomorrowmovie Warrior Of WindMaverickHomeless Warriormovie ………… Guarding The EmperorFlying Pen MediaNULLNULL Blacksmith With SilverDiarmud Inc.NULLNULL JONCTION À DROITE Là où il y a LEFT JOIN, il y a aussi RIGHT JOIN, n'est-ce pas ? Bien qu'il s'agisse de l'image inversée du LEFT JOIN, il fait toujours partie de la pratique des jointures SQL. Il s'agit d'un type de jointure qui renvoie toutes les colonnes de la table de droite (la deuxième) et uniquement les lignes correspondantes de la table de gauche (la première). S'il y a des données non correspondantes, elles sont affichées à l'adresse NULL. Exercice 6 : Afficher tous les livres avec leurs critiques (le cas échéant) Exercice : Joindre les tableaux book_review et book à l'aide d'un RIGHT JOIN. Affichez le titre du livre, la critique correspondante et le nom de l'auteur de la critique. Considérez tous les livres, même ceux qui n'ont pas fait l'objet d'une critique. Solution : SELECT book.title, book_review.review, book_review.author FROM book_review RIGHT JOIN book ON book.id = book_review.book_id; Explication de la solution : Nous sélectionnons d'abord les colonnes nécessaires. Ensuite, nous faisons ce qui nous est demandé : nous joignons les tables à l'aide de RIGHT JOIN. Nous joignons les tables sur l'ID du livre. La table book est la bonne table ; nous voulons toutes les données qu'elle contient, quelles que soient les critiques. Comme vous pouvez le constater, la syntaxe reste la même que pour INNER JOIN et LEFT JOIN. Remarque : SQL accepte à la fois RIGHT JOIN et RIGHT OUTER JOIN. Résultat de la solution : La requête renvoie tous les titres de livres, leurs critiques et leurs auteurs. Lorsqu'il n'y a pas de critique ou d'information sur l'auteur, une adresse NULL est affichée. titlereviewauthor Soulless girlAn incredible bookSylvia Jones Soulless girlGreat, although it has some flawsJessica Parker ……… Guarding The EmperorNULLNULL Companions And OfficersNULLNULL Blacksmith With SilverNULLNULL ……… JOINTURE COMPLÈTE Voici un autre type de jointure utile dans certains scénarios : la jointure FULL JOIN. Il s'agit d'une combinaison de LEFT JOIN et RIGHT JOIN. Elle montre les lignes correspondantes des deux tables, les lignes qui n'ont pas de correspondance dans la table de gauche et les lignes qui n'ont pas de correspondance dans la table de droite. En bref, il affiche toutes les données des deux tables. Vous pouvez en savoir plus sur la manière et le moment d'utiliser le FULL JOIN. Exercice 7 : Lister tous les livres et tous les auteurs Exercice : Affichez le titre de chaque livre ainsi que le nom de son auteur. Afficher tous les livres, même ceux qui n'ont pas d'auteur. Afficher tous les auteurs, même ceux qui n'ont pas encore publié de livre. Utilisez une adresse FULL JOIN. Solution : SELECT title, name FROM book FULL JOIN author ON book.author_id = author.id; Explication de la solution : La question demande d'afficher tous les livres, mais aussi tous les auteurs - FULL JOIN est parfait pour faire cela de manière élégante. Nous sélectionnons le titre du livre et le nom de l'auteur. Ensuite, nous FULL JOIN le tableau book avec le tableau author. La condition de jonction est que l'identifiant de l'auteur doit être le même dans les deux tables. Là encore, la syntaxe est la même que pour tous les types de jointure précédents. Remarque : SQL accepte à la fois FULL JOIN et FULL OUTER JOIN. Résultat de la solution : La sortie indique tous les livres et tous les auteurs, que les auteurs ou les livres existent ou non dans les deux tables. titlename Gone With The WolvesMarcella Cole Companions And OfficersLisa Mullins …… NULLDaniel Branson …… Weep Of The WestNULL Jointure de 3 tables ou plus Oui, les jointures SQL permettent de joindre plus de deux tables. Nous verrons comment le faire dans cette partie de la pratique des jointures SQL. Vous trouverez une explication plus détaillée des jointures multiples ici. Nous avons également besoin d'un nouvel ensemble de données, alors présentons-le. Jeu de données 2 La première table de l'ensemble de données est department. Ses colonnes sont les suivantes : id - L'identifiant unique du département. name - Le nom du département, c'est-à-dire l'endroit où un type de produit particulier est vendu. Voici les données de la table. idname 1fruits 2vegetables 3seafood 4deli 5bakery 6meat 7dairy La deuxième table est productet se compose des colonnes suivantes : id - L'ID d'un produit donné. name - Le nom du produit. department_id - L'ID du rayon où se trouve le produit. shelf_id - L'ID de l'étagère du département où se trouve le produit. producer_id - L'identifiant de l'entreprise qui fabrique ce produit. price - Le prix du produit. Voici l'aperçu des données : idnamedepartment_idshelf_idproducer_idprice 1Apple11NULL0.5 2Avocado1171 3Banana1170.5 4GrapefruitNULL110.5 5Grapes1142 ……………… Le tableau suivant est nutrition_data. Ses colonnes et ses données sont indiquées ci-dessous : product_id - L'ID d'un produit. calories - La valeur calorifique de ce produit. fat - La quantité de matières grasses dans ce produit. carbohydrate - La quantité d'hydrates de carbone dans ce produit. protein - La quantité de protéines dans ce produit. product_idcaloriesfatcarbohydrateprotein 1130051 2504.531 31100301 4600151 NULL900230 …………… Le quatrième tableau s'appelle producer. Il comporte les colonnes suivantes id - L'identifiant d'un producteur alimentaire donné. name - Le nom du producteur. Les données de ce tableau sont présentées ci-dessous : idname 1BeHealthy 2HealthyFood Inc. 3SupremeFoods 4Foodie 5Gusto 6Baker n Sons 7GoodFoods 8Tasty n Healthy Le dernier tableau de l'ensemble de données est sales_history. Elle comporte les colonnes suivantes : date - La date de la vente. product_id - L'identifiant du produit vendu. amount - La quantité de ce produit vendue un jour donné. Voici également les données : dateproduct_idamount 2015-01-14114 2015-01-14113 2015-01-1522 2015-01-1626 2015-01-1738 ……… Exercice 8 : Afficher les produits de moins de 150 calories et leur rayon Exercice : Dressez la liste de tous les produits qui contiennent moins de 150 calories. Pour chaque produit, indiquez son nom (renommez la colonne product) et le nom du rayon où il se trouve (nommez la colonne department). Solution : SELECT p.name AS product, d.name AS department FROM department d JOIN product p ON d.id = p.department_id JOIN nutrition_data nd ON nd.product_id = p.id WHERE nd.calories < 150; Explication de la solution : Le principe général de la jonction d'un troisième (quatrième, cinquième...) tableau est qu'il suffit d'ajouter un autre JOIN. Vous pouvez voir comment procéder dans cet article expliquant les jointures multiples. Nous allons procéder de la même manière ici. Nous joignons d'abord la table department avec la table product sur l'ID du département en utilisant JOIN. Mais nous avons également besoin de la troisième table. Pour obtenir les données, il suffit d'ajouter un autre JOIN, qui joindra la table sur l'ID du département à la table sur l'ID du département. product avec la table nutrition_data table. La syntaxe est la même que pour la première jointure. Dans ce cas, la requête joint les tables sur l'ID du produit. Nous utilisons ensuite WHERE pour trouver les produits contenant moins de 150 calories. Enfin, nous sélectionnons les noms des produits et des départements et renommons les colonnes conformément aux instructions de l'exercice. Remarque : vous avez probablement remarqué que les deux colonnes sélectionnées ont le même nom d'origine. Vous avez également remarqué que nous avons résolu cette ambiguïté en plaçant d'étranges noms de tables abrégés devant toutes les colonnes de la requête. Ces noms abrégés sont des alias de table, que vous donnez en les écrivant simplement après le nom de la table dans FROM ou JOIN. En donnant des alias aux tables, vous pouvez abréger leurs noms. Par conséquent, vous ne devez pas écrire leur nom complet (qui peut parfois être très long !), mais les alias courts à la place. Cela permet de gagner du temps et de l'espace. Résultat de la solution : Le résultat présente une liste des produits et du département auquel ils appartiennent. Elle ne comprend que les produits contenant moins de 150 calories. productdepartment Applefruits Avocadofruits Bananafruits Kiwifruits Lemonfruits …… Exercice 9 : Liste de tous les produits avec leurs producteurs, leurs départements et leurs glucides Exercice : Pour chaque produit, affichez Le nom de l'entreprise qui l'a produit (nommez la colonne producer_name). Le nom du département où se trouve le produit (nommez la colonne department_name). Le nom du produit (nommez-le product_name). Nombre total de glucides dans le produit. Votre requête doit toujours prendre en compte les produits ne contenant pas d'informations sur producer_id ou department_id. Solution : SELECT prod.name AS producer_name, d.name AS department_name, p.name AS product_name, nd.carbohydrate FROM product p LEFT JOIN producer prod ON prod.id = p.producer_id LEFT JOIN department d ON d.id = p.department_id LEFT JOIN nutrition_data nd ON nd.product_id = p.id; Explication de la solution : La requête sélectionne les colonnes requises. Elle joint ensuite la table product avec la table producer sur l'ID du producteur à l'aide de LEFT JOIN. Nous choisissons ce type de jointure parce que nous devons inclure des produits sans données sur le producteur. Nous ajoutons ensuite un autre LEFT JOIN. Celui-ci ajoute la table department et la jointure avec la table product table. Là encore, nous choisissons LEFT JOIN parce que nous devons afficher les produits qui n'ont pas de département. Il existe également une troisième jointure ! Nous l'ajoutons simplement à la chaîne des jointures précédentes. Il s'agit à nouveau de LEFT JOIN, car nous ajoutons la table nutrition_data et nous la joignons à la table product table. Il s'agit d'un sujet intéressant à explorer. Voici donc un article qui explique les jointures multiples à gauche pour vous aider. Résultat de la solution : Le résultat montre tous les produits avec le nom de leur producteur et de leur service, ainsi que les quantités d'hydrates de carbone : producer_namedepartment_nameproduct_namecarbohydrate BeHealthyfruitsKiwi20 BeHealthyvegetablesBroccoli8 BeHealthymeatChickenNULL BeHealthyNULLGrapefruit15 HealthyFood Inc.vegetablesCelery4 ………… Si vous avez besoin de plus de détails, veuillez lire comment joindre à gauche plusieurs tables en SQL. Exercice 10 : Afficher tous les produits, les prix, les producteurs et les départements Exercice : Pour chaque produit, affichez son nom, son prix, le nom du producteur et le nom du département. Alias des colonnes : product_name, product_price, producer_name, et department_name, respectivement. Incluez tous les produits, même ceux qui n'ont pas de producteur ou de département. Incluez également les producteurs et les départements sans produit. Solution : SELECT p.name AS product_name, p.price AS product_price, prod.name AS producer_name, d.name AS department_name FROM product p FULL JOIN producer prod ON p.producer_id = prod.id FULL JOIN department d ON d.id = p.department_id; Explication de la solution : Cet exercice nécessite l'utilisation de FULL JOIN, car nous avons besoin de toutes les données des tables que nous utiliserons : product, producer, et department. La syntaxe est la même que dans les exemples précédents. Nous joignons simplement les différentes tables (product et producer) sur l'ID du producteur et utilisons un type de jointure différent : FULL JOIN. Le second FULL JOIN joint la table product avec la table department table. Après avoir sélectionné les colonnes nécessaires et les avoir renommées, nous obtenons le résultat suivant. Résultat de la solution : La solution affiche toutes les données des tables et des colonnes sélectionnées : product_nameproduct_priceproducer_namedepartment_name Chicken5.5BeHealthymeat Broccoli2.5BeHealthyvegetables Kiwi0.3BeHealthyfruits Grapefruit0.5BeHealthyNULL Cucumber0.7HealthyFood Inc.vegetables ………… Auto-jonction Une jointure automatique n'est pas un type distinct de SQL JOIN - n'importe quelle jointure peut être utilisée pour la jointure automatique d'une table. Il s'agit simplement d'une jointure utilisée pour joindre la table à elle-même. En donnant des alias différents à la même table, celle-ci est traitée comme deux tables différentes lorsqu'elle est jointe. Pour plus de détails, consultez notre guide illustré de l'auto-jointure SQL. Ensemble de données 3 L'ensemble de données de cet exemple se compose d'une seule table : workshop_workers. Elle contient les colonnes suivantes. id - L'ID du travailleur. name - Le nom et le prénom du travailleur. specialization - La spécialisation du travailleur. master_id - L'ID du superviseur du travailleur. experience - Les années d'expérience du travailleur. project_id - L'ID du projet auquel le travailleur est actuellement affecté. Voici les données : idnamespecializationmaster_idexperienceproject_id 1Mathew ConnwoodworkingNULL201 2Kate Brownwoodworking141 3John Doeincrusting531 4John Kowalskywatchmaking723 5Suzan GregowitchincrustingNULL154 Exercice 11 : Liste de tous les travailleurs et de leurs superviseurs directs Exercice : Affichez les noms de tous les travailleurs ainsi que les noms de leurs superviseurs directs. Renommez les colonnes apprentice_name et master_name, respectivement. Ne considérez que les travailleurs qui ont un superviseur (c'est-à-dire un maître). Solution : SELECT apprentice.name AS apprentice_name, master.name AS master_name FROM workshop_workers apprentice JOIN workshop_workers master ON apprentice.master_id = master.id; Explication de la solution : Commençons par expliquer l'auto-jonction. Le principe général est le même que pour les jointures ordinaires. Nous référençons la table dans FROM et lui donnons un alias, apprentice. Ensuite, nous utilisons JOIN et y référençons la même table. Cette fois, nous donnons à la table l'alias master. Nous prétendons en fait qu'une table contient les données relatives aux apprentis et l'autre les données relatives aux maîtres d'apprentissage. Les tables sont jointes sur l'ID du maître d'apprentissage de la table apprentice et l'ID de la table master table. Cet exemple est une utilisation typique d'une jointure automatique : la table possède une colonne (master_id) qui fait référence à une autre colonne de la même table (id). Les deux colonnes indiquent l'identifiant du travailleur. Lorsqu'il y a NULL dans master_id, cela signifie que le travailleur n'a pas de maître. En d'autres termes, il est le maître. Après l'auto-jonction, il suffit de sélectionner les colonnes requises et de les renommer. Résultat de la solution : Le résultat montre tous les apprentis et leurs superviseurs directs. apprentice_namemaster_name Kate BrownMathew Conn John DoeSuzan Gregowitch John KowalskyJoe Darrington Peter ParkerJoe Darrington Mary SmithMathew Conn Carlos BellSuzan Gregowitch Dennis WrightJoe Darrington Jointures non équitables Le dernier sujet que nous aborderons dans cette pratique sur les jointures SQL est celui des jointures non égales. Les jointures que nous avons utilisées jusqu'à présent sont appelées jointures équi car elles utilisent le signe d'égalité (=) dans la condition de jointure. Les jointures non équi sont toutes les autres jointures qui utilisent d'autres opérateurs - opérateurs de comparaison (<, >, <=, >=, !=, <>), l'opérateur BETWEEN, ou toute autre condition logique - pour joindre les tables. Ensemble de données 4 Nous utiliserons l'ensemble de données composé de deux tableaux. La première table est car. Voici ses colonnes : id - L'identifiant de la voiture dans la base de données. model - Le modèle de la voiture. brand - La marque de la voiture. original_price - Le prix d'origine de la voiture à l'état neuf. mileage - Le kilométrage total de la voiture. prod_year - l'année de production de la voiture. Les données ressemblent à ceci : idmodelbrandoriginal_pricemileageprod_year 1SpeedsterTeiko80,000150,0001999 2RoadmasterTeiko110,00030,0001980 3SundryTeiko40,00025,0001991 4FuruDomus50,00010,0002002 5EmperorDomus65,000140,0002005 6KingDomus200,0006,0001981 7EmpressDomus60,0007,6001997 8FuryTatsu150,00013,0001993 Le deuxième tableau est charity_auction avec les colonnes suivantes : car_id - L'identifiant de la voiture. initial_price - Le prix initial de la voiture (c'est-à-dire le prix de départ). final_price - Le prix réel lorsque la voiture a été vendue. buyer_id - L'identifiant de la personne qui a acheté la voiture. Voici les données : car_idinitial_pricefinal_pricebuyer_id 165,000NULLNULL 335,00050,0001 550,000120,0003 6350,000410,0004 765,000NULLNULL Exercice 12 : afficher les voitures ayant un kilométrage supérieur à celui d'une voiture spécifique Exercice : Indiquez le modèle, la marque et le prix final de chaque voiture vendue aux enchères. Ne considérez que les voitures vendues qui ont un kilométrage supérieur à celui de la voiture dont le nom est id = 4. Solution : SELECT car.model, car.brand, car.final_price FROM car JOIN charity_auction ca ON car.id = ca.car_id JOIN car car2 ON car.mileage > car2.mileage WHERE car2.id = 4 AND final_price IS NOT NULL; Explication de la solution : Nous sélectionnons le modèle de voiture, la marque et le prix final. Dans le premier site JOIN, nous joignons le tableau car avec la table charity_auction table. Les tables sont jointes lorsque les identifiants des voitures sont identiques. Il s'agit de notre équi ordinaire JOIN. Nous ajoutons le deuxième JOIN, qui est une jointure automatique. Il ajoute la table car afin de pouvoir filtrer les données à l'aide de la condition de jointure non équivoque. La condition renverra toutes les voitures de la table car et toutes les voitures de la table car2 avec le kilométrage le plus bas. Il s'agit d'une condition non équivoque car elle utilise l'opérateur "supérieur à" ( > ). La syntaxe est la même, mais il y a > au lieu de = cette fois. Enfin, nous devons filtrer les données à l'aide de WHERE. Nous ne souhaitons pas comparer le kilométrage de toutes les voitures. Nous voulons afficher les voitures dont le kilométrage est supérieur à celui de la voiture dont l'adresse est id = 4. C'est ce que fait la première condition de filtrage. Nous ajoutons une autre condition de filtrage qui stipule que le prix final ne doit pas être NULL, c'est-à-dire que la voiture doit avoir été vendue aux enchères. Résultat de la solution : Le résultat indique deux voitures : modelbrandfinal_price SundryTeiko50,000 EmperorDomus120,000 Les jointures en SQL C'est en forgeant qu'on devient forgeron. Plus d'entraînement ? Encore plus parfait ! Douze exercices de jointure SQL représentent une bonne quantité de pratique. Grâce à ces exercices, vous avez pu apprendre et pratiquer tous les sujets de jointure les plus courants qui posent problème aux utilisateurs débutants et intermédiaires. Il ne vous reste plus qu'à continuer ! C'est en pratiquant encore plus que l'on devient encore plus parfait. Si vous avez aimé nos exercices, vous pouvez en trouver d'autres dans notre cours sur les jointures SQL ou dans l'article sur les questions d'entretien sur les jointures SQL. J'espère que vous réussirez tous les exercices qui vous y attendent ! Tags: sql join join jointures pratique sql