13th Oct 2023 12 minutes de lecture Qu'est-ce que le FULL JOIN en SQL ? Une explication avec 4 exemples Tihomir Babic sql join join jointures Table des matières Qu'est-ce qu'une jointure complète ? Syntaxe du FULL JOIN Autres types de jointures en SQL Exemples de FULL JOIN Exemple 1 : Afficher tous les employés et départements de la société Exemple 2 : Afficher tous les clients avec le nombre de produits achetés et le nombre de produits sans ventes Exemple 3 : Liste de toutes les paires d'étudiants certifiés et de leurs notes Exemple 4 : Trouver toutes les paires auteur-sujet et afficher les articles et leur statut Pas de FULL JOIN, pas de SQL Mastery Qu'est-ce que le FULL JOIN - l'un des types de jointures SQL les plus négligés ? Dans cet article, nous allons vous montrer à quel point FULL JOIN peut être utile et vous apprendre à l'appliquer à différents scénarios. Les quatre exemples couvrent quelques-unes des utilisations typiques. Une jointure SQL est une construction permettant de combiner des données provenant de deux tables ou plus. Le FULL JOIN est l'un des types de jointures. Vous tirerez le meilleur parti de cet article si vous êtes déjà familiarisé avec les jointures SQL et leur fonctionnement. Si ce n'est pas le cas ou si vos connaissances ont besoin d'être rafraîchies, nous vous recommandons de suivre notre cours interactif Les jointures en SQL pour combler vos lacunes. Quatre-vingt-treize exercices vous y attendent, dans lesquels vous récapitulerez les types de jointures et vous vous exercerez à filtrer des données à l'aide de jointures simples et multiples, d'auto-joints et de jointures non égales. Qu'est-ce qu'une jointure complète ? FULL JOIN ou FULL OUTER JOIN (SQL accepte les deux) est une jointure externe. En SQL, une jointure externe est un type de jointure qui inclut les lignes non appariées d'une ou des deux tables jointes ; LEFT JOIN et RIGHT JOIN sont également des jointures externes. FULL JOIN est l'union de LEFT JOIN et RIGHT JOIN: il montre les lignes correspondantes et non correspondantes des deux tables. Lorsque les valeurs d'une table ne correspondent pas à celles de l'autre table, FULL JOIN renvoie NULLs. Visuellement, cela peut être représenté comme suit : Syntaxe du FULL JOIN La syntaxe de FULL JOIN est la suivante : SELECT … FROM table1 FULL JOIN table2 ON table1.column = table2.column; Comme pour les jointures SQL, les parties principales de la syntaxe FULL JOIN sont les clauses JOIN et ON. La première table de la clause FROM est suivie du mot-clé FULL JOIN, qui joint la deuxième table. La condition sur laquelle les tables sont jointes est spécifiée dans la clause ON. En général, les tables sont jointes sur une colonne partagée entre elles - par exemple, la colonne id dans la table writer et la colonne writer_ID de la table book dans la table. Ces deux colonnes ont les mêmes valeurs en raison de la relation clé primaire - clé étrangère. Dans un exemple simple, nous pourrions écrire ce code et obtenir le résultat suivant : Autres types de jointures en SQL Nous avons déjà mentionné que FULL JOIN n'est qu'un des nombreux types de jointures en SQL. En voici la liste complète : (INNER) JOIN LEFT (OUTER) JOIN RIGHT (OUTER) JOIN FULL (OUTER) JOIN CROSS JOIN JOIN (ou INNER JOIN) est un type de jointure interne qui renvoie uniquement les lignes correspondantes des tables jointes. Pour en savoir plus sur la jointure interne, cliquez ici. LEFT JOIN (ou LEFT OUTER JOIN) répertorie toutes les lignes de la première table (gauche) et uniquement les lignes correspondantes de la deuxième table (droite). S'il n'y a pas de lignes correspondantes dans le tableau de droite, les valeurs sont affichées sous la forme NULL. Pour en savoir plus, consultez notre article sur le LEFT JOIN. RIGHT JOIN (ou RIGHT OUTER JOIN) est l'image miroir de LEFT JOIN. Il renvoie toutes les lignes de la deuxième table (droite) et uniquement les lignes correspondantes de la première table (gauche). Lorsqu'il y a des lignes non correspondantes dans le tableau de gauche, les valeurs sont NULL. Vous comprenez mieux maintenant pourquoi nous avons dit que FULL JOIN est l'union de LEFT JOIN et RIGHT JOIN. Comme il montre toutes les données des tables de gauche et de droite ainsi que les lignes non correspondantes, c'est comme si vous utilisiez LEFT JOIN et RIGHT JOIN en même temps. CROSS JOIN renvoie un produit cartésien. En d'autres termes, il renvoie toutes les combinaisons de toutes les lignes des deux tables jointes. Exemples de FULL JOIN Passons maintenant aux exemples qui illustrent l'utilisation typique de FULL JOIN. Exemple 1 : Afficher tous les employés et départements de la société Tâche : Vous devez afficher tous les employés d'une entreprise, même s'ils n'ont pas de département assigné. Vous devez également afficher tous les départements, même si aucun employé n'y est affecté. Ensemble de données : Nous utiliserons deux tables pour résoudre le problème. La première table est celle des départements (le script est ici), qui contient la liste des départements de l'entreprise : iddepartment_name 1IT 2Accounting 3Sales La seconde table est celle des employés, dont les données sont présentées ci-dessous. Le script est ici: idfirst_namelast_namedepartment_id 1SarahZimmerman2 2ThomasTyson1 3DanielRichardson1 4SofiaTardelli2 5MarkFitzpatrick4 Solution : SELECT first_name, last_name, department_name FROM employees e FULL JOIN department d ON e.department_id = d.id; Explication : Le code sélectionne le nom et le prénom des employés ainsi que le nom du service. Nous pouvons le faire parce que nous FULL JOIN les deux tables. Nous référençons la table employees dans FROM et lui donnons un alias. Ensuite, nous référençons la deuxième table, departmentdans FULL JOIN. Les tables sont jointes sur la base des identifiants de département trouvés dans les deux tables. Cette condition de jointure est écrite dans la clause ON. Résultat : La sortie renvoie toutes les données des deux tables. Certaines lignes intéressantes méritent d'être développées. Mark Fitzpatrick n'a pas de département. department_id est 5, mais il n'y a pas de département avec l'ID 5 dans la table. department. Il y a donc une valeur NULL sous le nom du département. Cela peut être dû au fait qu'il s'agit d'un nouvel employé et que la table n'a pas été mise à jour avec le département. employees n'a pas été mise à jour avec les données du département. De même, la dernière ligne indique le département Ventes, mais pas le nom de l'employé. Cela indique que le service des ventes n'a pas d'employés. Il n'y a rien d'anormal à cela, puisque nous avons appris que les trois employés du service des ventes ont récemment quitté l'entreprise. first_namelast_namedepartment_name SarahZimmermanAccounting ThomasTysonIT DanielRichardsonIT SofiaTardelliAccounting MarkFitzpatrickNULL NULLNULLSales Exemple 2 : Afficher tous les clients avec le nombre de produits achetés et le nombre de produits sans ventes Tâche : Il existe un magasin de disques en ligne qui vend des vinyles (c'est-à-dire des disques de musique). Votre tâche consiste à dresser la liste de tous les clients et à déterminer le nombre de vinyles achetés par chacun d'entre eux. Le résultat doit également indiquer le nombre de vinyles que personne n'a encore achetés. Ensemble de données : Nous travaillerons avec trois tableaux. La première est customeravec le script ici: idfirst_namelast_name 1MarvinSimmons 2MarianneDickens 3SusanStrozzi Vous pouvez trouver le script pour la deuxième table, vinyl, ici. La table montre la liste des vinyles, comme vous pouvez le voir ci-dessous : idartistalbum_nameprice 1Callier, TerryWhat Color is Love24.99 2Guy, BuddySweet Tea32.99 3Little SimzA Curious Tale of Trials32.99 4LaVette, BettyeScene of the Crime36.99 La troisième table est une table de jonction nommée purchase. Vous trouverez le script ici: idcustomer_idvinyl_idpurchase_date 1122023-01-03 2132023-01-12 3122023-02-18 4132023-03-01 5232023-03-01 6222023-04-01 7242023-05-01 Solution : SELECT first_name, last_name, COUNT (v.id) AS vinyl_count FROM customer c FULL JOIN purchase p ON c.id = p.customer_id FULL JOIN vinyl v ON p.vinyl_id = v.id GROUP BY first_name, last_name; Explication : Il s'agit d'un exemple d'utilisation de FULL JOIN et de jonction de plus de deux tables. La requête sélectionne les noms des clients. Ensuite, elle utilise la fonction d'agrégation COUNT() pour trouver le nombre de vinyles achetés. Nous FULL JOIN la table customer avec la table purchase table. Cette opération est effectuée sur les identifiants des clients dans les deux tables. Nous devons maintenant joindre la troisième table. C'est simple : écrivez à nouveau FULL JOIN et faites référence à la table vinyl. Vous pouvez maintenant la joindre à la table purchase sur les ID de vinyles. Résultat : La sortie montre qu'il y a un vinyle que personne n'a encore commandé. Vous pouvez le reconnaître grâce aux NULL. Il y a également une liste de tous les clients et le nombre de vinyles qu'ils ont achetés. Susan Strozzi n'a rien acheté. Marianne Dickens et Marvin Simmons ont acheté respectivement trois et quatre vinyles. first_namelast_namevinyl_count NULLNULL1 SusanStrozzi0 MarianneDickens3 MarvinSimmons4 Exemple 3 : Liste de toutes les paires d'étudiants certifiés et de leurs notes Tâche : Vous travaillez pour une plateforme de certification SQL en ligne. Elle propose plusieurs certifications ; chaque année, il y a une nouvelle édition de chaque certification. Trouvez toutes les paires possibles étudiant-certification et la note obtenue par chaque étudiant dans toutes les éditions de la certification. Ensemble de données : L'ensemble de données augmente ; il comprend désormais quatre tables. La première table est student; voici le script. Il s'agit d'une liste des étudiants de la plateforme : nos vinyles, respectivement. idfirst_namelast_name 1TomFrank 2MaryMaddison 3PavelKuba 4AmandaWilson La deuxième table est la table des certificats, qui contient la liste des certificats. Voici le script : idcertificate_name 1Microsoft Certified: Azure Data Fundamentals 2Oracle Database SQL Certified Associate Certification 3IBM Certified Database Associate 4MySQL 5.7 Database Administrator Certification 5EDB PostgreSQL 12 Associate Certification La table suivante est une table de jonction appelée certificate_enrollment idstudent_idedition_idgradepass 121620FALSE 226850TRUE 3210900TRUE 412100FALSE 517500FALSE 617800TRUE 748800TRUE . Vous trouverez le script ici. Le tableau indique quels étudiants se sont inscrits à quel certificat, ainsi que leurs notes et s'ils ont réussi : Le dernier tableau est une table de jonction appelée certificate_edition. Il présente la liste des éditions de certificats, en lien avec le tableau certificate. Le script est ici: idcertificate_idedition 112022 222022 332022 442022 552022 612023 722023 832023 942023 1052023 Solution : SELECT first_name, last_name, certificate_name, edition, grade FROM student s FULL JOIN certificate_enrollment cen ON s.id = cen.student_id FULL JOIN certificate_edition ced ON cen.edition_id = ced.id FULL JOIN certificate c ON ced.certificate_id = c.id; Explication : Nous sélectionnons d'abord toutes les colonnes pertinentes des quatre tables : first_name et last_name from student, certificate_name de certificate, edition à partir de certificate_edition, et grade à partir de certificate_enrollment. Ensuite, nous joignons les tables comme dans les exemples précédents. Tout d'abord, il s'agit de la student table FULL JOINed avec certificate_enrollment sur les identifiants des étudiants. Le second FULL JOIN ajoute la table certificate_edition pour la joindre à la table certificate_enrollment. Les tables sont jointes sur l'ID de l'édition du certificat. Maintenant que nous avons joint trois tables, nous pouvons en ajouter une quatrième. Nous référençons la table certificate dans FULL JOIN. Nous la joignons à certificate_edition sur l'ID du certificat. Résultat : La sortie montre exactement ce que nous voulons. Il y a une liste de tous les étudiants qui ont reçu un certificat, son édition et la note obtenue par chaque étudiant. Si la note est inférieure à 700, l'étudiant a échoué et doit repasser l'examen. Un étudiant ne s'est pas encore inscrit à un programme de certificat ; il s'agit de Pavel Kuba. Par ailleurs, quatre éditions du certificat n'ont pas encore d'étudiants inscrits. first_namelast_namecertificate_nameeditiongrade MaryMaddisonMicrosoft Certified: Azure Data Fundamentals2022620 MaryMaddisonMicrosoft Certified: Azure Data Fundamentals2023850 MaryMaddisonEDB PostgreSQL 12 Associate Certification2023900 TomFrankOracle Database SQL Certified Associate Certification2022100 TomFrankOracle Database SQL Certified Associate Certification2023500 TomFrankOracle Database SQL Certified Associate Certification2023800 AmandaWilsonIBM Certified Database Associate2023800 PavelKubaNULLNULLNULL NULLNULLEDB PostgreSQL 12 Associate Certification2022NULL NULLNULLMySQL 5.7 Database Administrator Certification2022NULL NULLNULLIBM Certified Database Associate2022NULL NULLNULLMySQL 5.7 Database Administrator Certification2023NULL Exemple 4 : Trouver toutes les paires auteur-sujet et afficher les articles et leur statut Tâche : Vous travaillez pour une entreprise qui recrute des rédacteurs d'articles pour ses clients. Il existe une liste de rédacteurs et de sujets que vous proposez. De plus, chaque sujet a actuellement plusieurs articles disponibles. Les rédacteurs sont affectés à ces articles. Un article peut avoir l'un des deux statuts suivants : "Rédaction" (l'article est en cours de rédaction) ou "Révision" (l'article est en cours de révision). Trouvez toutes les paires rédacteur-sujet. En outre, dressez la liste de tous les articles et de leur statut. Ensemble de données : Cet ensemble de données se compose également de quatre tableaux. Le premier tableau est le suivant writeravec le script lié ici: idfirst_namelast_name 1VictoriaThompson 2MikeMcGill 3SkyHerrera 4JimmyGoodman Le tableau suivant est topic. Voici le script : idtopic_name 1SQL 2Python 3ML 4SQL Careers 5Python Careers Le troisième tableau est article_assignment. Il relie le rédacteur à l'article et indique l'état actuel de l'article. Voici le script : idwriter_idarticle_idstatus 143Revising 241Writing 335Writing 438Revising 5310Revising 617Writing Le quatrième tableau relie l'article au sujet. Il s'appelle articleet le script se trouve ici: idarticle_titletopic_id 1What is FULL JOIN in SQL? An Explanation with 4 Examples1 2Pandas in Python2 3Supervised Learning3 4Basic SQL Interview Questions4 5Basic Python Interview Questions5 6SQL Fonctions de fenêtrage1 7Ranking Data in Python2 8Unsupervised Learning3 9Intermediate SQL Interview Questions4 10Intermediate Python Interview Questions5 Solution : SELECT first_name, last_name, topic_name, article_title, status FROM writer w FULL JOIN article_assignment aa ON w.id = aa.writer_id FULL JOIN article a ON aa.article_id = a.id FULL JOIN topic t ON a.topic_id = t.id; Explication : La requête est similaire à la précédente. Elle sélectionne toutes les colonnes pertinentes - le nom de l'auteur, le sujet, le titre de l'article et son statut. Ensuite, elle joint les tables writer et article_assignment sur l'ID de l'auteur à l'aide de FULL OUTER JOIN. Un autre FULL JOIN ajoute la troisième table article et la joint sur l'ID de l'article. Enfin, la quatrième table est reliée à l'identifiant du sujet. Résultat : Voici une liste de tous les rédacteurs, des sujets, des articles et des statuts. Les sujets de Jimmy Goodman sont ML et SQL. Sky Herrera écrit sur les carrières Python et la ML. Victoria Thompson n'écrit que sur Python. Mike McGill n'a pas d'articles assignés. De plus, il y a un article sur Python, un sur SQL et deux sur SQL Career qui n'ont été assignés à aucun auteur. first_namelast_nametopic_namearticle_titlestatus JimmyGoodmanMLSupervised LearningRevising JimmyGoodmanSQLWhat is FULL JOIN in SQL? An Explanation with 4 ExamplesWriting SkyHerreraPython CareersBasic Python Interview QuestionsWriting SkyHerreraMLUnsupervised LearningRevising SkyHerreraPython CareersIntermediate Python Interview QuestionsRevising VictoriaThompsonPythonRanking Data in PythonWriting MikeMcGillNULLNULLNULL NULLNULLPythonPandas in PythonNULL NULLNULLSQLSQL Fonctions de fenêtrageNULL NULLNULLSQL CareersBasic SQL Interview QuestionsNULL NULLNULLSQL CareersIntermediate SQL Interview QuestionsNULL Pas de FULL JOIN, pas de SQL Mastery FULL JOIN La jointure complète n'est probablement pas utilisée aussi souvent que JOIN ou LEFT JOIN. Il s'agit d'une jointure humble qui attend que vous en ayez besoin pour briller de tous ses feux. Mais sans elle dans votre répertoire, vous ne pouvez pas vous qualifier de maître SQL. Les exemples ci-dessus vous ont montré des scénarios pratiques dans lesquels vous devez utiliser toutes les données de deux tables (ou plus). FULL JOIN vous facilite la tâche ! Bien sûr, vous aurez besoin de plus de pratique, car la partie la plus cruciale de l'utilisation des jointures SQL est le choix de la jointure à utiliser. Une fois cette étape maîtrisée, les jointures deviennent faciles : la syntaxe est la même, quel que soit le type de jointure utilisé. Notre cours Les jointures en SQL peut vous aider à maîtriser JOINs, car il regorge d'exercices pratiques. Il en va de même pour notre article de pratique sur les jointures SQL avec 12 exemples. Après avoir appris tout cela, il ne sera pas difficile de répondre aux questions d'entretien sur les jointures SQL. Maintenant, c'est à vous d'utiliser toutes ces ressources pour maîtriser FULL JOIN! Tags: sql join join jointures