2nd Dec 2022 8 minutes de lecture SQL INNER JOIN expliqué en mots simples Ignacio L. Bisso bases du sql sql apprendre sql Table des matières Une base de données d'agence de voyage Votre premier SQL JOIN : Obtenir les paquets de voyage comprenant les villes de la plage Dans cet article, je vais aborder l'élément peut-être le plus important du langage SQL. C'est bien cela ! Je parle de la clause SQL INNER JOIN. Comme vous le savez, dans une base de données, les données sont stockées dans plusieurs tables. Dans mon dernier article, j'ai expliqué comment créer des requêtes SQL lorsque les données dont vous avez besoin se trouvent dans une seule table. Mais que se passe-t-il si les données dont vous avez besoin se trouvent dans deux tables ? Dans ce cas, vous devez utiliser une clause JOIN pour combiner les deux tables, ce qui revient à connecter les deux tables. Dans cet article, je vais expliquer la clause SQL INNER JOIN en termes simples à l'aide de quelques exemples faciles à comprendre. Une base de données d'agence de voyage Vous savez peut-être déjà que dans une base de données, les données sont stockées dans des tables. Supposons que vous travaillez pour une agence de voyage et que la base de données de l'agence comporte deux tables : TRAVEL_PACK et CITIES. Dans l'image suivante, vous pouvez voir la base de données, bien sûr toutes les données ne sont pas affichées. Exemple de TRAVEL_PACK Table PACK_NAMEBEST_SEASONPRICEDURATION United States: Big CitiesAll year$3500.0010 days United States: West CoastMarch to May$3700.0012 days South American TourAugust to November$1850.0018 days Beaches of BrazilDecember to March$2200.007 days Exemple de CITIES Table NAMETYPE_OF_CITYPACK_NAMEDAYS_STAYING San FranciscohistoricalUnited States: West Coast5 WashingtonhistoricalUnited States: Big Cities3 New YorkbusinessUnited States: Big Cities7 Rio de JaneirobeachBeaches of Brazil4 UshuaiamountainSouth American Tour3 Salvador de BahiabeachBeaches of Brazil3 Los AngelesbeachUnited States: West Coast7 Remarque : pour utiliser une clause JOIN afin de combiner deux tables, il doit y avoir un champ ou une colonne qui apparaît dans les deux tables. Dans l'exemple de base de données, ce champ est le nom du paquet de voyage. Comme vous pouvez le voir dans la table TRAVEL_PACK le nom du paquet se trouve sous la colonne PACK_NAMEet dans la table CITIES le nom du pack se trouve dans la colonne PACK_NAME également. Il est facile de voir que les deux colonnes ont le même nom de colonne, mais dans d'autres bases de données, il peut être différent. En d'autres termes, lorsqu'on utilise une clause INNER JOIN, le nom de la colonne commune peut être différent ou non dans les deux tables. Quoi qu'il en soit, n'oubliez pas le nom de la colonne PACK_NAMEcar vous en aurez besoin plus tard pour écrire la clause JOIN. Votre premier SQL JOIN : Obtenir les paquets de voyage comprenant les villes de la plage Je recommande généralement de commencer par réfléchir à l'endroit où se trouvent les données dont vous avez besoin pour la requête. Dans ce cas, il est clair que vous aurez besoin de la table TRAVEL_PACK pour obtenir les noms des paquets, mais en même temps vous aurez également besoin de la table CITIES car vous devez vérifier si la ville est une ville de plage ou non. Ainsi, les données nécessaires à cette requête se trouvent dans deux tables, ce qui explique pourquoi vous devez utiliser un SQL JOIN. Lorsque vous devez obtenir des données de deux tables (ou plus), vous devez utiliser une jointure SQL. La jointure SQL agit comme un connecteur entre deux tables, créant des paires d'enregistrements. En fait, elle prend deux enregistrements (un dans chaque table) et les joint en une paire d'enregistrements. Ce type de jointure est appelé INNER JOIN, et en SQL les termes JOIN et INNER JOIN sont exactement les mêmes. Pour les lecteurs qui veulent aller plus loin, il existe d'autres types de jointure SQL, par exemple l'opposé de la jointure INNER est un autre type de jointure appelé jointure LEFT ou jointure OUTER LEFT, et vous pouvez également trouver d'autres types de jointure comme la jointure RIGHT, la jointure NATURAL et la jointure LATERAL entre autres. Vous pouvez apprendre beaucoup de ces types de jointures SQL dans le cours en ligneLes jointures en SQL . Cependant, dans cet article, je me concentrerai sur la jointure INNER JOIN, qui est vraiment puissante ! L'image suivante montre comment la clause JOIN crée une paire d'enregistrements : (cliquez pour agrandir) Maintenant, je vais montrer la syntaxe pour mettre en œuvre un INNER JOIN, en utilisant le modèle suivant FROM table1 INNER JOIN table2 ON common column in table1 = common column in table2 Si vous remplissez le modèle avec vos exemples de tables et de noms de colonnes, vous obtiendrez la clause INNER JOIN suivante : FROM CITIES INNER JOIN TRAVEL_PACK ON CITIES.PACK_NAME = TRAVEL_PACK.PACK_NAME FROM CITIES Une fois que vous avez complété la clause FROM avec le INNER JOIN, vous pouvez continuer à travailler sur les clauses SELECT et WHERE de la requête. La clause SELECT est facile car il suffit de retourner la colonne NAME, puis la clause sera : SELECT TRAVEL_PACK.PACK_NAME Notez que la référence à la colonne PACK_NAME est faite en ajoutant un préfixe avec le nom de la table (TRAVEL_PACK dans ce cas). Il s'agit d'une bonne pratique à appliquer lorsque la requête implique plus d'une table. Dans la clause WHERE, vous devrez filtrer les résultats pour inclure uniquement les villes de plage. La clause sera donc la suivante : WHERE CITIES.TYPE_OF_CITY = 'beach' Enfin, si vous réunissez toutes les clauses, la requête sera la suivante : SELECT TRAVEL_PACK.PACK_NAME FROM CITIES JOIN TRAVEL_PACK ON CITIES.PACK_NAME = TRAVEL_PACK.PACK_NAME WHERE CITIES.TYPE_OF_CITY = 'beach' Voici le résultat de la requête précédente : NAME Los Angeles Salvador de Bahia Rio de Janeiro Votre prochaine jointure : les villes incluses dans les packs de voyage de moins de 2500$. Comme pour la requête précédente, vous pouvez constater que vous devez accéder à deux tables pour cette requête, en utilisant un JOIN pour les colonnes CITIES et TRAVEL_PACK à nouveau. Notez que j'utilise le terme JOIN au lieu de INNER JOIN car les deux sont exactement les mêmes en SQL. Grâce à la requête précédente, vous savez déjà comment créer la clause JOIN. Les changements se trouvent dans les clauses SELECT et WHERE, comme vous pouvez le voir dans les paragraphes suivants. La clause select est simple, car vous n'avez besoin que du nom de la ville : SELECT CITY.NAME Dans la clause where, vous devez filtrer par le prix du pack de voyage, alors la clause WHERE sera : WHERE TRAVEL_PACK.PRICE <= 2500 Ensuite, la requête complète sera la suivante : SELECT CITY.NAME FROM CITIES JOIN TRAVEL_PACK ON CITIES.PACK_NAME = TRAVEL_PACK.PACK_NAME WHERE TRAVEL_PACK.PRICE <= 2500 Le résultat de la requête précédente sera : NAME Rio de Janeiro Ushuaia Salvador de Bahia Plongée profonde : INNER JOIN pour trois tables Est-il possible d'utiliser un INNER JOIN avec plus de deux tables ? Bien sûr que oui. De plus, vous pouvez utiliser une clause JOIN avec autant de tables que vous le souhaitez. Cependant, je dois préciser que chaque clause SQL JOIN ne concerne qu'une seule paire de tables. Ainsi, si vous avez trois tables à joindre, telles que T1, T2 et T3, vous aurez besoin de deux clauses SQL JOIN comme vous pouvez le voir dans l'exemple suivant : FROM T1 JOIN T2 ON ...... JOIN T3 ON ....... J'ai laissé la clause ON vide car je vais expliquer cette partie avec l'exemple suivant. Supposons que vous étendiez la base de données de l'agence en ajoutant une nouvelle table appelée STATES où vous prévoyez de stocker les états, régions ou provinces de chaque pays. La base de données avec trois tables sera comme l'image suivante : TRAVEL_PACK Table PACK_NAMEBEST_SEASONPRICEDURATION United States: Big CitiesAll year$3500.0010 days United States: West CoastMarch to May$3700.0012 days South American TourAugust to November$1850.0018 days Beaches of BrazilDecember to March$2200.007 days STATES Table NAMECOUNTRYPOPULATIONLANGUAGE New YorkUnited States17000000english Tierra del FuegoArgentina190000spanish CaliforniaUnited States13400000english Rio de JaneiroBrasil15000000portuguese BahiaBrasil8000000portuguese CITIES Table NAMETYPE_OF CITYPACK_NAMEDAYS_STAYSTATE San FranciscohistoricalUnited States: West Coast5California WashingtonhistoricalUnited States: Big Cities3Washington New YorkbusinessUnited States: Big Cities7New York Rio de JaneirobeachBeaches of Brazil4Rio de Janeiro UshuaiamountainSouth American Tour3Tierra del Fuego Salvador de BahiabeachBeaches of Brazil3Bahia Los AngelesbeachUnited States: West Coast7California Supposons que vous ayez besoin d'obtenir un rapport contenant une liste de toutes les villes avec l'état, le nom du pack et la langue utilisée dans la ville dans les états où la langue est l'espagnol ou le portugais. Il est clair que vous devez JOINDRE les tables CITIES et STATES et ensuite JOINDRE ce résultat également avec la table TRAVEL_PACK table. Vous pouvez commencer par appliquer ce que vous avez appris dans les exemples précédents. Tout d'abord, utilisez une clause JOIN pour combiner la table CITIES avec la table STATES. Il est clair que vous devez utiliser les colonnes CITIES.STATE et STATE.NAME dans la clause ON. Ensuite, la clause from sera la suivante : FROM CITIES JOIN STATES ON CITIES.STATE = STATES.NAME Ensuite, vous devez ajouter la troisième table à la clause JOIN, qui est la table TRAVEL_PACK. Vous avez déjà appris comment JOINER cette table dans un exemple précédent, donc le JOIN complet sera : FROM CITIES JOIN STATES ON CITIES.STATE = STATES.NAME JOIN TRAVEL_PACK ON CITIES.PACK_NAME = TRAVEL_PACK.PACK_NAME En ajoutant les clauses SELECT et WHERE, la requête complète sera la suivante : SELECT CITIES.NAME, STATES.NAME, TRAVEL_PACK.PACK_NAME, STATES.LANGUAGE FROM CITIES JOIN STATES ON CITIES.STATE = STATES.NAME JOIN TRAVEL_PACK ON CITIES.PACK_NAME = TRAVEL_PACK.PACK_NAME WHERE STATES.LANGUAGE IN ('spanish','portuguese') Et le résultat sera : NAMENAMEPACK_NAMELANGUAGE SalvadorBahiaBeaches of Brazilportuguese Rio de JaneiroRio de JaneiroBeaches of Brazilportuguese UshuaiaTierra del FuegoSouth American Tourspanish Étapes suivantes pour continuer à apprendre Dans cet article, j'ai expliqué comment joindre des tables en SQL. J'ai expliqué à l'aide d'exemples ce qu'est un INNER JOIN SQL et comment fonctionne la clause JOIN. La clause JOIN ouvre un monde énorme de nouvelles possibilités en SQL. Pensez que toute personne non technique capable d'utiliser la clause JOIN dans des requêtes SQL possède une valeur ajoutée en tant qu'employé, quel que soit le secteur de l'entreprise dans lequel elle travaille. Allez au fond des choses avec Les jointures en SQL et soyez un solide contributeur commercial dans votre entreprise ! Tags: bases du sql sql apprendre sql