Les jointures
IntermédiaireUne jointure combine les lignes de deux tables selon une condition : c'est ce qui rend le modèle relationnel utile.
Schéma des exemples : clients(id, nom) et commandes(id, client_id, total, cree_le).
-- INNER JOIN : uniquement les clients qui ont au moins une commande
SELECT c.nom, o.id, o.total
FROM clients c
JOIN commandes o ON o.client_id = c.id;
-- LEFT JOIN : tous les clients, avec NULL côté commande s'il n'y en a pas
SELECT c.nom, o.id
FROM clients c
LEFT JOIN commandes o ON o.client_id = c.id;
Quel type choisir#
| Jointure | Garde | Cas typique |
|---|---|---|
INNER JOIN (JOIN) | Les lignes qui correspondent des deux côtés | Détail d'une commande avec son client |
LEFT JOIN | Toutes les lignes de gauche, NULL à droite s'il n'y a pas de correspondance | Clients avec ou sans commande |
RIGHT JOIN | L'inverse (rare : on réécrit en LEFT) | |
FULL JOIN | Toutes les lignes des deux côtés | Réconcilier deux sources de données |
CROSS JOIN | Le produit cartésien | Générer toutes les combinaisons |
Trouver ce qui manque : anti-jointure#
-- Clients sans aucune commande
SELECT c.id, c.nom
FROM clients c
LEFT JOIN commandes o ON o.client_id = c.id
WHERE o.id IS NULL;
Piège : une condition sur la table de droite placée dans le
WHERE(WHERE o.total > 100) transforme silencieusement unLEFT JOINenINNER JOIN, puisque les lignesNULLsont éliminées. Mettez-la dans leONsi vous voulez garder les clients sans commande :LEFT JOIN commandes o ON o.client_id = c.id AND o.total > 100.