Retour à la liste des articles Articles
8 minutes de lecture

SQL INNER JOIN expliqué en mots simples

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 :

Un GIF représentant le fonctionnement de la jointure interne des tables.

(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 !