🛢️Parcours Fioul GroupéMySQL · Chapitre 03
Accueil › MySQL › Chapitre 03
Chapitre 03 / 16

Les jointures

Les données sont réparties dans plusieurs tables pour éviter les redondances. Les jointures les recombinent : c'est ce qui fait la puissance du relationnel.

1 Notion

Joindre deux tables

Une commande référence son participant par la clé étrangère participant_id. Pour afficher le nom du participant à côté de sa commande, on joint les tables sur commande.participant_id = participant.id.

SELECT c.id, c.litres, p.nom
FROM commande AS c
INNER JOIN participant AS p ON c.participant_id = p.id;
Alias de table — commande AS c allège l'écriture ; on préfixe alors chaque colonne (c.litres, p.nom).
2 Notion

INNER, LEFT, RIGHT, CROSS

JointureGarde…
INNER JOINseulement les lignes appariées des deux côtés
LEFT JOINtoutes les lignes de gauche (NULL si pas d'appariement)
RIGHT JOINtoutes les lignes de droite
CROSS JOINle produit cartésien (toutes les combinaisons)

La jointure externe trouve les « orphelins », ex. les participants sans aucune commande :

SELECT p.nom
FROM participant AS p
LEFT JOIN commande AS c ON c.participant_id = p.id
WHERE c.id IS NULL;
3 Notion

Jointures multiples

On enchaîne autant de JOIN que nécessaire pour traverser le schéma : de la commande jusqu'au fournisseur, en passant par la campagne.

SELECT p.nom, ca.libelle, f.nom AS fournisseur, c.litres
FROM commande AS c
JOIN participant AS p ON c.participant_id = p.id
JOIN campagne    AS ca ON c.campagne_id   = ca.id
JOIN fournisseur AS f  ON ca.fournisseur_id = f.id
ORDER BY p.nom;
USING — si la clé porte le même nom des deux côtés, JOIN campagne USING(campagne_id) remplace le ON.
🛢️ Sur le projet Fioul Groupé

« Détail d'une campagne » : chaque participant inscrit et son volume, plus le fournisseur retenu. C'est la requête derrière l'écran de suivi du coordinateur.

SELECT p.nom, c.litres
FROM commande AS c
JOIN participant AS p ON c.participant_id = p.id
WHERE c.campagne_id = 1
ORDER BY c.litres DESC;
À retenir
← Chapitre 02