Tutoriels gratuits et ouverts à toutes et à tous · conçus au Lycée Chevrollier — AngersÀ propos

SQL : interroger plusieurs tables avec les jointures

Comprendre INNER JOIN et LEFT JOIN sur un cas concret, puis écrire des requêtes sûres contre l’injection SQL.

Bases de données✎ B. Jousseaume📅 21 septembre 2026⏱ 2 h📶 Intermédiaire

Le modèle de données

Une médiathèque enregistre ses adhérents et leurs emprunts :

adherentemprunt
id (PK)id (PK)
nomid_adherent (FK → adherent.id)
villetitre, date_emprunt

Téléchargez le script (colonne de droite) et importez-le : mariadb -u root -p < base-mediatheque.sql.

INNER JOIN : uniquement les correspondances

SELECT a.nom, e.titre, e.date_emprunt
FROM adherent a
INNER JOIN emprunt e ON e.id_adherent = a.id
ORDER BY e.date_emprunt DESC;

Seuls les adhérents ayant au moins un emprunt apparaissent.

LEFT JOIN : tout le côté gauche

SELECT a.nom, COUNT(e.id) AS nb_emprunts
FROM adherent a
LEFT JOIN emprunt e ON e.id_adherent = a.id
GROUP BY a.id, a.nom;

Depuis une application : attention à l’injection

// ❌ Vulnérable
$sql = "SELECT nom FROM adherent WHERE ville = '" . $_GET['ville'] . "'";

// ✅ Requête préparée (PDO)
$stmt = $pdo->prepare('SELECT nom FROM adherent WHERE ville = :ville');
$stmt->execute(['ville' => $_GET['ville'] ?? '']);
$noms = $stmt->fetchAll(PDO::FETCH_COLUMN);

🧠 Testez vos connaissances

3 questions. Répondez puis cliquez sur « Corriger ». Rien n’est enregistré : c’est de l’auto-évaluation.

1. Quelle jointure garde les adhérents qui n’ont jamais emprunté ?

💬 LEFT JOIN conserve toutes les lignes de la table de gauche ; les colonnes de droite valent NULL quand il n’y a pas de correspondance.

2. Quelle condition repère les adhérents sans emprunt après un LEFT JOIN ?

💬 NULL ne se compare jamais avec = : on utilise IS NULL.

3. Quelle est la protection efficace contre l’injection SQL ?

💬 Avec une requête préparée, la valeur est envoyée séparément du code SQL : elle ne peut jamais être interprétée comme une instruction.

© 2026 Bruno Jousseaume. Ce cours est publié sous licence CC BY-NC-SA 4.0 : vous pouvez le partager et l’adapter en citant l’auteur et un lien vers cette page, sans usage commercial, et en partageant vos adaptations sous la même licence.

Pour aller plus loin

Installer et prendre en main DBeaver

Comprendre pourquoi DBeaver expose moins le serveur que phpMyAdmin, autoriser les connexions distantes, puis installer DBeaver, se connecter, explorer la base et exécuter ses premières requêtes.

Débutant⏱ 2 h · 16 octobre 2026