</>
Plan du cours — 8/64

Les jointures

Intermédiaire

Une 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#

JointureGardeCas typique
INNER JOIN (JOIN)Les lignes qui correspondent des deux côtésDétail d'une commande avec son client
LEFT JOINToutes les lignes de gauche, NULL à droite s'il n'y a pas de correspondanceClients avec ou sans commande
RIGHT JOINL'inverse (rare : on réécrit en LEFT)
FULL JOINToutes les lignes des deux côtésRéconcilier deux sources de données
CROSS JOINLe produit cartésienGé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 un LEFT JOIN en INNER JOIN, puisque les lignes NULL sont éliminées. Mettez-la dans le ON si vous voulez garder les clients sans commande : LEFT JOIN commandes o ON o.client_id = c.id AND o.total > 100.