Kodokon kodokon.com

INNER JOIN : relier deux tables

Croisez les données de deux tables avec INNER JOIN, des alias lisibles et une condition de jointure précise.

7 min · 3 questions

Ouvrir cette leçon dans Kodokon

Une base réelle ne stocke jamais tout dans une seule table : les clients d'un côté, leurs commandes de l'autre. Pour pratiquer ce module, ouvrez sqliteonline.com dans votre navigateur (aucune installation) ou lancez l'outil sqlite3 dans un terminal. Collez d'abord le script ci-dessous : il crée les deux tables utilisées dans cette leçon.

SQL
CREATE TABLE customers (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  city TEXT
);

CREATE TABLE orders (
  id INTEGER PRIMARY KEY,
  customer_id INTEGER NOT NULL,
  amount REAL NOT NULL,
  ordered_at TEXT NOT NULL
);

INSERT INTO customers (id, name, city) VALUES
  (1, 'Alice', 'Lyon'),
  (2, 'Karim', 'Paris'),
  (3, 'Mina', 'Nantes');

INSERT INTO orders
  (id, customer_id, amount, ordered_at)
VALUES
  (1, 1, 49.90, '2026-06-01'),
  (2, 1, 15.00, '2026-06-12'),
  (3, 2, 120.50, '2026-06-15');
Script de départ : exécutez-le avant les exemples qui suivent.

INNER JOIN assemble deux tables ligne par ligne selon une condition de correspondance, écrite après ON. Ici, chaque commande est reliée au client dont l'id égale son customer_id. Les lignes sans correspondance sont écartées du résultat : Mina, qui n'a rien commandé, n'apparaît pas.

SQL
SELECT customers.name, orders.amount
FROM orders
INNER JOIN customers
  ON customers.id = orders.customer_id;
Chaque commande accompagnée du nom de son client.

Répéter les noms complets des tables devient vite illisible. Un alias déclaré avec AS renomme la table pour la durée de la requête. Préfixez systématiquement les colonnes ambiguës : id existe dans les deux tables, écrivez donc c.id ou o.id, jamais id seul.

SQL
SELECT c.name, o.amount, o.ordered_at
FROM orders AS o
INNER JOIN customers AS c
  ON c.id = o.customer_id
WHERE o.amount > 20
ORDER BY o.amount DESC;
Alias courts, filtre et tri : une requête professionnelle type.

Quiz de validation

Vérifiez que vous avez bien retenu les points clés de cette leçon.

  1. Dans une jointure, quel mot-clé introduit la condition de correspondance entre les deux tables ?
    • WHERE
    • ON
    • HAVING
    • MATCH
  2. Avec un INNER JOIN entre customers et orders, qu'advient-il d'un client qui n'a aucune commande ?
    • Il apparaît avec des colonnes à NULL
    • Il est absent du résultat
    • La requête échoue
  3. Pourquoi écrire c.id plutôt que id dans une requête qui joint customers et orders ?
    • Pour accélérer l'exécution de la requête
    • Parce que id existe dans les deux tables et serait ambigu
    • Parce que SQLite l'exige pour toutes les colonnes