Pourquoi les données sont-elles séparées ?
Une base relationnelle évite de recopier les mêmes informations dans chaque ligne. La table clients conserve le nom et la ville de chaque client, tandis que la table commandes mémorise les achats.
Pour afficher le nom du client à côté d’une commande, SQL doit réunir ces deux sources au moment de la lecture. C’est le rôle d’une jointure.
La clé commune rend la relation possible
Dans clients, id_client identifie une personne de manière unique : c’est la clé primaire. Dans commandes, la même valeur indique qui a passé la commande : elle joue le rôle de clé étrangère.
La relation ne dépend donc pas du nom du client. Deux personnes peuvent avoir le même nom, alors que leur identifiant reste unique.
clients
- id_client INTEGER PRIMARY KEY
- nom VARCHAR
- ville VARCHAR
commandes
- id_commande INTEGER PRIMARY KEY
- id_client INTEGER
- montant DECIMALÉcrire un INNER JOIN étape par étape
La requête part de clients, ajoute commandes, puis décrit la correspondance dans la clause ON. INNER JOIN conserve uniquement les lignes pour lesquelles cette correspondance existe.
Les alias c et co raccourcissent les références. Ils évitent aussi toute ambiguïté lorsque les deux tables possèdent une colonne portant le même nom.
FROM clients AS cdéfinit la première source.INNER JOIN commandes AS coajoute la deuxième table.ON c.id_client = co.id_clientprécise quelles lignes correspondent.SELECTchoisit seulement les colonnes utiles au résultat.
SELECT
c.nom,
co.id_commande,
co.montant
FROM clients AS c
INNER JOIN commandes AS co
ON c.id_client = co.id_client
ORDER BY co.montant DESC;Lire et contrôler le résultat
Une commande associée à un client produit une ligne dans le résultat. Si un client possède trois commandes, son nom apparaît trois fois : ce ne sont pas des doublons accidentels, mais trois faits différents.
Avant d’ajouter des calculs, contrôlez quelques identifiants manuellement. Une jointure correcte doit préserver le sens métier des lignes et ne pas multiplier leur nombre sans raison.
INNER JOIN ou LEFT JOIN ?
INNER JOIN répond à la question « quelles commandes possèdent un client correspondant ? ». Un client sans commande disparaît du résultat.
LEFT JOIN conserve au contraire tous les clients de la table située à gauche. Les colonnes de commande valent NULL lorsqu’aucune commande ne correspond. Ce choix est utile pour trouver les clients inactifs.
SELECT c.nom, co.id_commande
FROM clients AS c
LEFT JOIN commandes AS co
ON c.id_client = co.id_client;Cinq erreurs fréquentes avec les jointures
Une requête peut s’exécuter sans erreur technique tout en produisant un résultat métier incorrect. La condition ON mérite donc une relecture attentive.
- Oublier la clause
ONet créer toutes les combinaisons possibles. - Relier le nom du client au lieu de son identifiant stable.
- Confondre
id_clientetid_commande. - Utiliser
INNER JOINalors que les lignes sans correspondance doivent être conservées. - Sélectionner toutes les colonnes avec
*et rendre le résultat difficile à vérifier.
La méthode à retenir
Identifiez d’abord la question métier, puis la table qui représente chaque objet. Repérez ensuite la clé primaire et la clé étrangère, écrivez la condition ON et vérifiez quelques lignes.
Lorsque ce résultat est fiable, vous pouvez ajouter un filtre, un tri ou une agrégation. L’exercice clients-commandes vous permet d’appliquer immédiatement cette méthode.
Reliez maintenant deux tables.
Appliquez INNER JOIN à un cas clients-commandes avec une correction expliquée.
