Code SQL copié dans le presse-papiers
Apprenez à utiliser l'INNER JOIN SQL pour combiner les lignes correspondantes de plusieurs tables. Cette leçon couvre la syntaxe, la logique visuelle et des exemples pratiques avec la base Sakila, y compris la jointure de trois tables ou plus. Maîtrisez les concepts relationnels et améliorez vos requêtes SQL pour l'analyse de données.
RU EN PT

Leçon 5.2 : INNER JOIN — Combiner les lignes correspondantes

Dans la leçon précédente, nous avons posé le concept de base des jointures pour récupérer des données liées. Le type de jointure le plus courant et le plus utilisé est l'INNER JOIN. Dans cette leçon, nous allons détailler sa logique, sa syntaxe et ses usages pratiques.

Qu'est-ce qu'un INNER JOIN ?

Un INNER JOIN combine les lignes de deux tables uniquement lorsqu'il existe une valeur correspondante dans les deux tables selon une condition donnée. Si une ligne de la Table A n'a pas de correspondance dans la Table B, elle est exclue du résultat. Idem pour les lignes de la Table B sans correspondance dans la Table A.

C'est l'intersection de deux ensembles de données.

Visualisation :

   Table A (customer)           Table B (payment)
   +----+----------+            +----+----------+
   | id | nom      |            | id | montant  |
   +----+----------+            +----+----------+
   | 1  | Alice    | <--------> | 1  | 10.00    | (Correspondance !)
   | 2  | Bob      |            | 1  | 15.00    | (Correspondance !)
   | 3  | Charlie  |            | 4  | 20.00    | (Pas de correspondance pour Charlie ou ID 4)
   +----+----------+            +----+----------+

Charlie est exclu car il n'a pas de paiement, et le paiement avec customer_id 4 est exclu car il n'y a pas de client avec cet ID.

Syntaxe de l'INNER JOIN

La syntaxe standard :

SELECT
    table1.colonne1,
    table2.colonne2
FROM
    table1
INNER JOIN
    table2 ON table1.colonne_commune = table2.colonne_commune;
  • INNER JOIN : indique qu'on ne veut que les lignes correspondantes.
  • ON : définit la condition de correspondance (souvent la clé primaire d'une table et la clé étrangère de l'autre).

Remarque : Dans la plupart des bases SQL (MySQL, PostgreSQL, SQL Server), le mot-clé INNER est optionnel. JOIN et INNER JOIN donnent le même résultat.

Exemples pratiques (base Sakila)

1. Relier villes et pays

La table city contient un country_id qui référence la table country. Pour voir le nom de la ville et du pays :

SELECT
    ci.city,
    co.country
FROM
    city AS ci
INNER JOIN
    country AS co ON ci.country_id = co.country_id;

Cette requête ne retourne que les villes liées à un pays valide.

2. Lister le personnel et leurs adresses

Pour trouver où chaque membre du personnel habite, on joint staff et address :

SELECT
    s.first_name,
    s.last_name,
    a.address,
    a.district
FROM
    staff AS s
INNER JOIN
    address AS a ON s.address_id = a.address_id;

Joindre plus de deux tables

On peut chaîner plusieurs INNER JOIN pour rassembler des infos de plusieurs tables. Par exemple, pour voir dans quels films un acteur a joué, il faut trois tables : actor, film, et la table de liaison film_actor.

SELECT
    a.first_name,
    a.last_name,
    f.title
FROM
    actor AS a
INNER JOIN
    film_actor AS fa ON a.actor_id = fa.actor_id
INNER JOIN
    film AS f ON fa.film_id = f.film_id
LIMIT 10;

Comment ça fonctionne :

  1. La première jointure relie actor et film_actor via actor_id.
  2. La seconde jointure relie le résultat à la table film via film_id.
  3. Seuls les enregistrements présents dans les trois tables apparaissent dans le résultat.

Points clés de cette leçon

  • INNER JOIN est le type de jointure par défaut en SQL.
  • Il retourne les lignes uniquement si elles ont une correspondance dans les deux tables.
  • Les lignes sans correspondance sont exclues du résultat.
  • On peut joindre plusieurs tables en ajoutant des INNER JOIN successifs.
  • Utiliser des alias (AS ci, AS co) rend les jointures complexes plus lisibles.