4th Jul 2022 8 minutes de lecture Comment joindre des tables en SQL sans utiliser les JOINs Tihomir Babic fact table data warehouse Table des matières La première méthode : FROM et WHERE Syntaxe Exemple Requête Résultat La deuxième méthode : UNION/UNION ALL Syntaxe Exemple Requête : UNION Résultat : UNION Requête : UNION ALL Résultat : UNION ALL Oui, les tables peuvent être jointes sans le mot-clé JOIN Apprenez toutes les méthodes possibles pour joindre des tables en SQL Voici comment vous pouvez combiner des tables sans le mot-clé JOIN sans le mot-clé JOIN. Il semble que cela ne devrait pas être possible : joindre des tables en SQL sans utiliser le mot-clé JOIN. Mais l'utilisation du mot-clé JOIN n'est pas la seule façon de joindre des tables en SQL. Cet article vous montrera deux méthodes supplémentaires pour joindre des tables. Aucune d'entre elles ne nécessite le mot-clé JOIN pour fonctionner. Ces méthodes sont les suivantes L'utilisation d'une virgule entre les noms de tables dans la clause FROM et la spécification de la condition de jointure dans une clause de type WHERE Utilisation de UNION/UNION ALL. Je suppose que vous connaissez le fonctionnement de JOIN. Si vous en avez besoin, voici un rappel sur la façon de joindre des tables à l'aide de JOINs. La première méthode : FROM et WHERE Syntaxe La syntaxe de cette méthode de jonction de tables sans utiliser JOINs est la suivante : SELECT * FROM , WHERE Vous pouvez remplacer le mot-clé JOIN par une virgule dans la clause FROM. Que faites-vous ensuite ? Il n'y a pas de mot-clé ON pour indiquer la condition de jonction, comme c'est le cas lorsque vous utilisez JOIN, par exemple, sur quelles deux colonnes vous voulez joindre les tables. Dans cette méthode, vous utilisez simplement une clause WHERE pour le faire. Cette méthode fait exactement la même chose que : SELECT * FROM <table1> JOIN <table2> ON <condition> Voyons comment elle fonctionne en pratique. Exemple Dans cet exemple, j'ai besoin de trouver le nom de l'artiste, les albums qu'il/elle a enregistrés, et les années dans lesquelles ils ont été enregistrés, pour chaque artiste. Pour vous montrer comment cette méthode fonctionne, je vais utiliser deux tableaux. La première est artist: idartist_name 1Paul Simon 2Marvin Gaye 3Bettye LaVette 4Joni Mitchell 5Sly and the Family Stone Il s'agit d'un tableau simple contenant plusieurs de mes musiciens préférés. L'autre table , albumressemble à ceci : idalbum_nameyear_recordedartist_id 1Dance to the Music19685 2Small Talk19745 3Stranger to Stranger20161 4I've Got My Own Hell to Raise20053 5Blues19714 6Court and Spark19744 7A Tribute to the Great Nat "King" Cole19652 8Graceland19861 9Still Crazy After All These Years19751 10In the Blue Light20181 11There's a Riot Goin' On19715 12The Scene of the Crime20073 13Mingus19794 14What's Going On19712 15Here, My Dear19782 Ce sont les albums enregistrés par les musiciens de la première table. Requête La requête pour joindre ces tables sans le mot-clé JOIN ressemble à ceci : SELECT artist_name, album_name, year_recorded FROM artist, album WHERE artist.id = album.artist_id; D'abord, je spécifie les colonnes que je veux voir dans mon résultat : artist_name, album_name, et year_recorded. Elles proviennent soit de artist ou de album. Je joins ces deux tables simplement en les énumérant dans la clause FROM et en les séparant par une virgule. La clause WHERE est généralement utilisée pour filtrer les résultats. Je peux l'utiliser pour filtrer ce résultat afin qu'il affiche toutes les données pour lesquelles la colonne id de la table artist est égale à la colonne artist_id du tableau album. Vous pouvez voir que la condition dans WHERE dans cette requête est la même qu'après le mot-clé ON lorsque vous utilisez JOIN: artist.id = album.artist_id. La requête équivalente avec un mot-clé JOIN est la suivante : SELECT artist_name, album_name, year_recorded FROM artist JOIN album ON artist.id = album.artist_id; Résultat Ces deux requêtes renvoient le même résultat : artist_namealbum_nameyear_recorded Paul SimonIn the Blue Light2018 Paul SimonStill Crazy After All These Years1975 Paul SimonGraceland1986 Paul SimonStranger to Stranger2016 Marvin GayeHere, My Dear1978 Marvin GayeWhat's Going On1971 Marvin GayeA Tribute to the Great Nat "King" Cole1965 Bettye LaVetteThe Scene of the Crime2007 Bettye LaVetteI've Got My Own Hell to Raise2005 Joni MitchellMingus1979 Joni MitchellCourt and Spark1974 Joni MitchellBlues1971 Sly and the Family StoneThere's a Riot Goin' On1971 Sly and the Family StoneSmall Talk1974 Sly and the Family StoneDance to the Music1968 Vous voyez que le résultat combine les données des deux tables initiales. Je peux maintenant voir, par exemple, que Paul Simon a enregistré l'album "In the Blue Light" en 2018. Si vous n'avez pas confiance en ma requête, vous pouvez toujours consulter Wikipedia ! Cette méthode utilise une colonne commune pour joindre les tables. Rappelez-vous que vous pouvez également joindre des tables qui n'ont pas de colonne commune. La deuxième méthode : UNION/UNION ALL Syntaxe SELECT , , … FROM UNION / UNION ALL SELECT , , … FROM Les instructions UNION et UNION ALL sont utilisées pour coller ensemble le résultat de la première requête avec celui de la seconde. Il suffit d'écrire deux déclarations SELECT et d'écrire UNION ou UNION ALL entre les deux. Mais quelle est la différence entre ces deux mots-clés SQL ? Rappel : UNION supprime les lignes en double de la requête et ne les affiche qu'une seule fois. UNION ALL affiche toutes les lignes des deux tables, quel que soit le nombre de doublons. Pour que UNION et UNION ALL fonctionnent, toutes les colonnes des deux instructions SELECT doivent correspondre. Cela signifie que le nombre de colonnes sélectionnées doit être le même et que les types de données de ces colonnes doivent être les mêmes. Ces deux opérateurs sont appelés opérateurs de jeu. Lisez cet article pour en savoir plus sur ces opérateurs et d'autres opérateurs de set. Exemple Nous avons également deux tables dans cet exemple. La première est nommée customer: idfirst_namelast_name 1JimmyHellas 2FrancoisJambony 3RenataTraviata 4CarmenNaburana 5SteveInicks 6ElviraSamson 7AlpaCino 8RosaSparks 9BernardineSane 10BertRandrussell Elle contient la liste de mes clients. La deuxième table est supplier: idfirst_namelast_name 1ArpadPolanski 2BillyVan Persie 3SteveInicks 4Jean-ClaudeZaandam 5EminaArkayeva 6BoMilosz 7JanWrangler 8HeinrichStroopwafel 9HerringoStarr 10JosephineMatijevic 11AlpaCino 12FlintWestwood 13DesPaulmond 14WilmaJackson 15KatrinVerson 16BertRandrussell 17CarmenNaburana 18JimmyTulp 19LuisWolf 20MirandaFanucci Si vous examinez ces tableaux d'un peu plus près, vous verrez que certaines personnes figurent dans les deux tableaux. Par exemple, regardez Steve Inicks - cela signifie que Steve est, avec d'autres, à la fois mon client (il achète certains services à mon entreprise) et mon fournisseur (il me fournit certains services). Voyons maintenant à quoi cela ressemble lorsque je joins ces tables avec UNION ou UNION ALL. Requête : UNION Cette méthode de combinaison de tables sans utiliser le mot-clé JOIN se traduit par la requête suivante : SELECT first_name, last_name FROM customer UNION SELECT first_name, last_name FROM supplier; La première instruction SELECT sélectionne les colonnes first_name et last_name dans la table customer. La deuxième instruction SELECT fait la même chose mais à partir de la table supplier. J'utilise UNION pour joindre les résultats de ces deux requêtes. Cela fonctionne : il y a deux colonnes dans les deux instructions SELECT, et elles sont du même type de données. Elles portent même le même nom, bien que cela ne soit pas nécessaire pour que la requête fonctionne. Résultat : UNION En exécutant la requête, vous obtenez ceci : first_namelast_name AlpaArpad CinoBilly JosephineMatijevic LuisWolf Jean-ClaudeZaandam SteveInicks BillyVan Persie EminaArkayeva MirandaFanucci BoMilosz JimmyHellas FrancoisJambony RosaSparks KatrinVerson JanWrangler BernardineSane HeinrichStroopwafel ElviraSamson RenataTraviata JimmyTulp WilmaJackson ArpadPolanski BertRandrussell DesPaulmond FlintWestwood CarmenNaburana HerringoStarr Comme je l'ai mentionné, c'est une combinaison de toutes les données des deux tables. Vérifions les doublons. J'ai mentionné que Steve Inicks figure dans les deux déclarations customer et supplier et . Dans le résultat de la requête, vous ne le trouvez qu'une seule fois. J'ai marqué la ligne où il se trouve. Voyons en quoi cela est différent de UNION ALL. Requête : UNION ALL Dans ce cas, la requête est la suivante : SELECT first_name, last_name FROM customer UNION ALL SELECT first_name, last_name FROM supplier; Comme vous pouvez le voir, ce n'est pas très différent. En fait, il s'agit de la même requête, sauf qu'elle comporte UNION ALL au lieu de UNION. Cependant, les résultats sont différents. Voyons cela de plus près. Résultat : UNION ALL Le résultat de la requête est : first_namelast_name JimmyHellas FrancoisJambony RenataTraviata CarmenNaburana SteveInicks ElviraSamson AlpaCino RosaSparks BernardineSane BertRandrussell ArpadPolanski BillyVan Persie SteveInicks Jean-ClaudeZaandam EminaArkayeva BoMilosz JanWrangler HeinrichStroopwafel HerringoStarr JosephineMatijevic AlpaCino FlintWestwood DesPaulmond WilmaJackson KatrinVerson BertRandrussell CarmenNaburana JimmyTulp LuisWolf MirandaFanucci Sachant que Steve Inicks apparaît à la fois comme client et comme fournisseur, vérifions combien de fois il apparaît dans le résultat. Il y est deux fois, les deux fois marquées en bleu. J'ai également marqué trois autres personnes qui apparaissent deux fois : Alpa Cino, Bert Randrussell et Carmen Naburana. Voici un autre exemple d'utilisation de UNION et UNION ALL... Oui, les tables peuvent être jointes sans le mot-clé JOIN Comme vous venez de le voir, il n'est pas toujours nécessaire d'utiliser le mot-clé JOIN pour combiner deux tables en SQL. Vous pouvez le remplacer par une virgule dans la clause FROM puis indiquer votre condition de jonction dans la clause WHERE. L'autre méthode consiste à écrire deux instructions SELECT. Le résultat de chacune d'elles étant une table, il suffit d'utiliser UNION ou UNION ALL pour combiner les deux. N'oubliez pas que cette méthode ne fonctionne que si vos instructions SELECT comportent le même nombre de colonnes et les mêmes types de données. Utilisez UNION lorsque vous ne souhaitez pas afficher les doublons et UNION ALL lorsque vous souhaitez les afficher. Apprenez toutes les méthodes possibles pour joindre des tables en SQL Plus vous connaissez de façons de joindre des tables en SQL, mieux c'est. Avec ces deux méthodes et le JOIN, joindre des tables devient plus facile. Les résultats de vos requêtes sont plus proches de ce dont vous avez besoin, et vous tirez un meilleur parti de SQL. Le fait de connaître plusieurs façons de joindre des tables vous permet également de secouer un peu votre code. Il peut être ennuyeux d'écrire tout de la même façon tout le temps. Mais surtout, chacune de ces trois méthodes est utile dans différentes situations. Vous pouvez apprendre toutes ces méthodes de jonction de tableaux dans notre cours SQL pour les débutants . Il ne s'agit que d'une première étape vers la maîtrise de Le SQL de A à Z. Vous avez également besoin de beaucoup de pratique pour maîtriser la jonction de tableaux. Le mieux est peut-être de choisir au moins une option en ligne dans notre liste de dix. Tags: fact table data warehouse