Pourquoi a-t-on besoin des JOIN ?
Dans une vraie base, les informations sont réparties en plusieurs tables.
Exemple : les commandes sont dans commandes et les clients dans clients.
Sans JOIN, vous pourriez lire une commande… mais pas le nom du client lié.
Une facture contient un “id client”. Pour afficher la facture avec le nom du client,
vous devez “aller chercher” l’info dans la table clients. JOIN fait exactement ça.
Une jointure (JOIN) est une requête qui combine des lignes de plusieurs tables
en s’appuyant sur une condition de lien (souvent PK ↔ FK).
Exemple de base (clients ↔ commandes)
On part d’un schéma simple :
Table clients
id (PK), nom
Table commandes
id (PK), date_commande, client_id (FK)
Lien
commandes.client_id → clients.id
Objectif
Afficher les commandes avec le nom du client.
INNER JOIN : afficher seulement les correspondances
INNER JOIN affiche uniquement les lignes qui ont une correspondance dans les deux tables.
Si une commande n’a pas de client valide, elle n’apparaîtra pas.
SELECT
commandes.id,
commandes.date_commande,
clients.nom
FROM commandes
INNER JOIN clients
ON commandes.client_id = clients.id;
“Je veux les commandes, et je les relie aux clients quand client_id est égal à id”.
Les alias : écrire plus court (et plus clair)
Quand les requêtes deviennent longues, on utilise des alias :
clients devient c, commandes devient co.
SELECT co.id, co.date_commande, c.nom
FROM commandes co
INNER JOIN clients c
ON co.client_id = c.id;
Dans les projets, vous joignez souvent 3, 4 tables ou plus.
Les alias rendent la requête lisible.
LEFT JOIN : garder toutes les lignes de gauche
LEFT JOIN garde toutes les lignes de la table de gauche (celle après FROM),
même si aucune correspondance n’existe dans la table de droite.
SELECT c.id, c.nom, co.id AS commande_id
FROM clients c
LEFT JOIN commandes co
ON co.client_id = c.id;
👉 Ici, un client sans commande apparaît quand même, et commande_id vaut NULL.
“Afficher tous les clients, même ceux qui n’ont jamais commandé.”
Le piège classique : WHERE peut casser un LEFT JOIN
Avec un LEFT JOIN, si vous mettez une condition sur la table de droite dans WHERE,
vous risquez de supprimer les lignes où la valeur est NULL.
SELECT c.nom, co.id
FROM clients c
LEFT JOIN commandes co
ON co.client_id = c.id
WHERE co.id > 0;
Les clients sans commande ont co.id = NULL. La condition co.id > 0 élimine ces lignes.
Résultat : vous ne voyez plus les clients sans commande.
Mettez la condition dans la partie ON (ou utilisez des tests sur NULL).
Vous verrez des exemples avancés plus tard.
JOIN et relation N-N : la table de liaison
Pour une relation N-N, vous passez par la table de liaison.
Exemple : films ↔ acteurs via film_acteur.
SELECT f.titre, a.nom
FROM films f
INNER JOIN film_acteur fa ON fa.film_id = f.id
INNER JOIN acteurs a ON fa.acteur_id = a.id;
“Je pars des films, je passe par la table de liaison, et j’arrive aux acteurs.”
Bonnes pratiques avec JOIN
1
Toujours préciser les colonnes
Évitez SELECT * avec des JOIN : ça devient confus.
Écrivez les colonnes utiles.
2
Utiliser des alias
Surtout dès que vous joignez 2 tables ou plus.
Exemple : clients c, commandes co.
3
Vérifier la logique PK ↔ FK
La condition ON doit refléter la relation :
table_enfant.fk = table_parent.pk
4
Commencer simple
Testez d’abord avec une seule jointure (2 tables), puis ajoutez la 3e, etc.
Exercice pratique : vos premières jointures
Vous pouvez réutiliser vos tables clients et commandes (ou en créer de petites).
Objectif : pratiquer INNER JOIN et LEFT JOIN.
1) Commandes + nom du client
Affichez : id commande, date, nom client.
Indice : INNER JOIN
2) Tous les clients, même sans commande
Affichez : id client, nom, id commande (ou NULL).
Indice : LEFT JOIN
3) Trier le résultat
Triez les commandes par date décroissante.
Indice : ORDER BY
Bonus
Limitez l’affichage aux 10 dernières commandes.
Indice : LIMIT
1) INNER JOIN • 2) LEFT JOIN • 3) ORDER BY • Bonus : LIMIT.
L’essentiel est de réussir le ON correctement (FK = PK).
Récapitulatif du chapitre
- Comprendre à quoi servent les JOIN
- Écrire un INNER JOIN (correspondances uniquement)
- Écrire un LEFT JOIN (tout à gauche + NULL si pas de match)
- Utiliser des alias pour clarifier les requêtes
- Comprendre le piège WHERE + LEFT JOIN
- Joindre une relation N-N via une table de liaison
Prochain chapitre : les fonctions SQL (COUNT, SUM, AVG, MIN, MAX…) pour analyser vos données.