Retour à la liste des articles Articles
6 minutes de lecture

Qu'est-ce qu'un INNER JOIN SQL ?

Comment combiner des données provenant de différentes tables dans une même requête ? Une fonctionnalité SQL appelée JOIN est l'opérateur le plus couramment utilisé pour créer des requêtes complexes. Découvrez les principes de base dans cet article.

SQL nous permet de sélectionner des données dans plusieurs tables. En fait, l'idée même d'utiliser des bases de données relationnelles est de sélectionner des données dans des tables liées. Pour ce faire, nous pouvons utiliser l'opérateur JOIN de SQL.

Il existe de nombreux types de JOIN en SQL. Dans cet article, nous allons nous concentrer sur INNER JOIN, qui est la commande par défaut de JOIN (c'est-à-dire celle que vous obtenez si vous utilisez le mot-clé JOIN seul).

Quand avez-vous besoin de JOIN ?

Pourquoi aurions-nous besoin de joindre des données provenant de plusieurs tables ? La réponse est simple : parfois, une seule table ne contient pas toutes les données dont vous avez besoin.

Imaginez que la table movie stocke des informations dans les colonnes id, title, production_year et director_id.

idtitleproduction_yeardirector_id
1Psycho19601
2Midnight in Paris20112
3Sweet and Lowdown19932
4Talk to her20023
5The skin I live here20113

Un autre tableau, directorcontient des informations sur les réalisateurs : leurs colonnes id, name et birth_year.

idnamebirth_year
1Alfred Hitchcock1899
2Woody Allen1935
3Pedro Almodóvar1949

Notez que chaque film n'a qu'une seule colonne relative au réalisateur : director_id. Les mêmes valeurs de numéro d'identification dans la table director (dans la colonne director_id ) et dans la table movie (dans la colonne id ).

Nous aimerions afficher les données de chaque film avec les détails de son réalisateur. Le résultat est une nouvelle table avec des données provenant de deux tables : movie et director. Les tables sont combinées (ou jointes) sur la base des numéros d'identification des réalisateurs. En d'autres termes, les films ayant un director_id spécifique sont combinés avec les informations du réalisateur ayant cet ID - par exemple, le film Psychose avec director_id=1 est associé à l'enregistrement où id=1 (Alfred Hitchcock) dans la table director tableau. Regardez l'ensemble des résultats :

idtitleproduction_yeardirector_ididnamebirth_year
1Psycho196011Alfred Hitchcock1899
2Midnight in Paris201122Woody Allen1935
3Sweet and Lowdown199322Woody Allen1935
4Talk to her200233Pedro Almodóvar1949
5The skin I live here201133Pedro Almodóvar1949

Une version illustrée d'un exemple similaire est présentée dans l'article An Illustrated Guide to the SQL INNER JOIN.

Comment utiliser le JOIN dans une requête SQL

Maintenant, analysons la requête que nous venons d'utiliser. La voici à nouveau :

SELECT *  
FROM movie  
JOIN director  
ON movie.director_id=director.id;

JOIN est une forme plus courte de la clause INNER JOIN; vous pouvez les utiliser de manière interchangeable.

Après avoir SELECT vos colonnes, vous mettez le mot clé FROM et le nom de la première table (dans cet exemple, movie). Ensuite, vous mettez JOIN (ou INNER JOIN), suivi du nom de la deuxième table (ici, director). Viennent ensuite le mot-clé ON et la condition de jointure (c'est-à-dire la manière de faire correspondre les enregistrements des deux tables). Dans ce cas, la condition de jointure fait correspondre les valeurs de la colonne director_id de la table movie avec la colonne id de la table director.

De cette façon, les enregistrements de la table movie sont mis en correspondance avec les enregistrements corrects de la table director. Nous savons maintenant que le film Sweet and Lowdown a été réalisé par le cinéaste Woody Allen, né en 1935. Ce film a pour nom director_id=2; il y a une valeur correspondante dans la colonne (id) de la table. director.

L'animation ci-dessous montre comment l'utilisation de l'opérateur JOIN fonctionne et quels enregistrements sont renvoyés :

JOIN

Un opérateur JOIN fonctionne de manière logique, en deux étapes. La première étape renvoie un produit cartésien, c'est-à-dire que chaque ligne du premier tableau est combinée avec chaque ligne du second tableau. Dans l'étape suivante, seules les paires d'enregistrements qui remplissent la condition de la clause ON sont retournées - dans cet exemple, seules les lignes où director_id in movie est égal à id dans director.

Notez que les valeurs utilisées dans la condition de jointure ne doivent pas nécessairement être des nombres. Vous pouvez également utiliser des valeurs de texte et d'autres conditions plus complexes. Vous trouverez plus d'informations dans l'article SQL INNER JOIN Explained in Simple Words.

Que se passe-t-il si les enregistrements ne correspondent pas ?

Que se passe-t-il si certains enregistrements de la première table ne peuvent pas être mis en correspondance avec des enregistrements de la deuxième table, ou vice versa ? Comment le site INNER JOIN fonctionne-t-il dans ce cas ? Prenons un exemple. Voici à nouveau la table movie table :

idtitleproduction_yeardirector_id
1Psycho19601
2Midnight in Paris20112
3Sweet and Lowdown19932
4Talk to her20023
5The skin I live in20113
6The new house2020NULL

Et voici director:

idnamebirth_year
1Alfred Hitchcock1899
2Woody Allen1935
3Pedro Almodóvar1949
4Martin Scorsese1942

Voici la même requête :

SELECT title, production_year, director_id,
       id, name, birth_year   
FROM movie  
JOIN director  
ON movie.director_id=director.id;

Le tableau de résultats contient uniquement les enregistrements qui constituent une paire correspondante :

idtitleproduction_yeardirector_ididnamebirth_year
1Psycho196011Alfred Hitchcock1899
2Midnight in Paris201122Woody Allen1935
3Sweet and Lowdown199322Woody Allen1935
4Talk to her200233Pedro Almodóvar1949
5The skin I live in201133Pedro Almodóvar1949

Si vous regardez la table moviela colonne director_id est NULL pour le film The new house. Et dans la table directorle réalisateur Martin Scorsese (id=4) n'est lié à aucune ligne de la table movie. Par conséquent, ces lignes ne sont pas affichées dans le jeu de résultats.

La règle pour INNER JOIN (JOIN) est que seules les lignes avec une correspondance dans les deux tables sont retournées. Dans les autres types d'opérateurs JOIN, ce comportement est différent. Approfondissez ce sujet en lisant l'article Les types de jointures SQL expliqués.

Filtrage des enregistrements dans l'ensemble de résultats

Vous pouvez également filtrer les enregistrements renvoyés par JOIN. Par exemple, nous pouvons afficher uniquement les films et leurs réalisateurs dont le réalisateur est né après 1940. Voici la requête :

SELECT title, production_year, director_id,
       id, name, birth_year   
FROM movie  
JOIN director  
ON movie.director_id=director.id
WHERE director.birth_year>1940;

Elle renvoie le résultat :

idtitleproduction_yeardirector_ididnamebirth_year
4Talk to her200233Pedro Almodóvar1949
5The skin I live in201133Pedro Almodóvar1949

Une fois encore, nous avons des lignes de la table movie combinées avec des lignes de la table director. Initialement, la condition de jointure est la même (ON director.id=movie.director_id).

Cependant, à l'étape suivante, les enregistrements dont la valeur est inférieure ou égale à 1940 dans la colonne birth_year sont supprimés. Ainsi, vous ne trouvez pas Woody Allen dans le jeu de résultats car il est né en 1935 (avant/moins de 1940). Alfred Hitchcock n'est pas là non plus ; il est né en 1899. Nous y sommes parvenus grâce à WHERE director.birth_year>1940.

Vous voulez en savoir plus sur Les jointures en SQL?

Si vous souhaitez approfondir vos connaissances, essayez notre SQL pour les débutants qui contient plus d'informations sur la jointure de tables (y compris de nombreux exercices pratiques !). Il fait partie du parcours Les Fondamentaux de SQLqui vous aidera à faire passer vos connaissances SQL au niveau supérieur.

Ou peut-être connaissez-vous déjà un peu de SQL et souhaitez-vous en savoir plus sur les JOIN. Dans ce cas, je vous suggère de consulter Comment apprendre Les jointures en SQL, Les types de jointures SQL expliqués, et notre fiche d'information sur les jointures SQL. Vous pouvez également suivre notre cours Les jointures en SQL . Ensuite, mettez en pratique ce que vous savez en utilisant notre parcours d'apprentissage en ligneLa pratique du SQL . Bon apprentissage !