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).INNER, LEFT, RIGHT, CROSS
| Jointure | Garde… |
|---|---|
| INNER JOIN | seulement les lignes appariées des deux côtés |
| LEFT JOIN | toutes les lignes de gauche (NULL si pas d'appariement) |
| RIGHT JOIN | toutes les lignes de droite |
| CROSS JOIN | le 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;
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
- Une jointure recombine des tables reliées par clé étrangère.
- INNER = intersection ; LEFT/RIGHT gardent un côté complet (orphelins).
- On enchaîne les JOIN pour traverser tout le schéma.
- Le self join relie une table à elle-même.