Une jointure suit une relation entre deux tables
La table clients possède une clé primaire id_client. La table commandes reprend cet identifiant comme clé étrangère. La condition ON indique à SQL comment associer les lignes.
Les alias courts rendent les colonnes non ambiguës et permettent de voir immédiatement leur table d’origine.
SELECT
c.nom,
co.id_commande,
co.montant
FROM clients AS c
INNER JOIN commandes AS co
ON co.id_client = c.id_client;INNER JOIN conserve uniquement les correspondances
Un client sans commande ne figure pas dans le résultat d’un INNER JOIN avec les commandes. Une commande liée à aucun client valide serait également exclue.
Ce comportement convient lorsque l’analyse porte précisément sur les commandes associées à un client connu.
LEFT JOIN conserve toutes les lignes de gauche
Pour lister tous les clients, y compris ceux qui n’ont encore rien commandé, placez clients à gauche d’un LEFT JOIN. Les colonnes de commande valent NULL lorsqu’aucune correspondance n’existe.
Cette structure permet de détecter les clients inactifs avec WHERE co.id_commande IS NULL.
SELECT c.id_client, c.nom
FROM clients AS c
LEFT JOIN commandes AS co
ON co.id_client = c.id_client
WHERE co.id_commande IS NULL
ORDER BY c.id_client;Une relation un-à-plusieurs multiplie naturellement les lignes
Un client ayant trois commandes apparaît trois fois dans un résultat détaillé. Ce ne sont pas forcément des doublons : chaque ligne représente une commande différente.
Si vous voulez une ligne par client, regroupez ensuite par client et calculez COUNT ou SUM. N’ajoutez pas DISTINCT avant d’avoir compris le niveau de détail.
SELECT
c.id_client,
c.nom,
COUNT(co.id_commande) AS nombre_commandes,
COALESCE(SUM(co.montant), 0) AS montant_total
FROM clients AS c
LEFT JOIN commandes AS co
ON co.id_client = c.id_client
GROUP BY c.id_client, c.nom
ORDER BY montant_total DESC;Vérifiez votre compréhension
Listez tous les clients avec leur nombre de commandes, y compris ceux qui n’en ont aucune.
SELECT c.nom, COUNT(-- colonne) AS nombre_commandes
FROM clients AS c
-- jointure commandes
GROUP BY c.id_client, c.nom;Progression
Avez-vous terminé cette leçon ?
Votre choix reste dans ce navigateur et se synchronise aussi avec votre compte lorsque vous êtes connecté.