17
Chapitre 17 sur 21

Les jointures (JOIN)

Les relations (PK ↔ FK) vous ont appris comment les tables sont reliées. Les JOIN vous apprennent maintenant comment afficher des informations venant de plusieurs tables dans un seul résultat. C’est une compétence essentielle en SQL.

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é.

🧾

Analogie : facture + fiche client

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.

📖

Définition : JOIN

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_idclients.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;
🧠

Lire la requête en français

“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;

Pourquoi c’est important

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.

💡

Cas réel

“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.

-- Exemple : ceci annule l'effet du LEFT JOIN
SELECT c.nom, co.id
FROM clients c
LEFT JOIN commandes co
ON co.client_id = c.id
WHERE co.id > 0;
⚠️

Pourquoi ?

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.

Solution simple

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 : filmsacteurs 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;
🧠

Lecture simple

“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

🧠

Auto-correction

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

Ce que vous savez faire

  • 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.