Jointures

Pourquoi une jointure crée-t-elle des doublons ?

La jointure ne crée pas toujours une erreur : elle révèle souvent une relation un-à-plusieurs mal anticipée.

Équipe SQL.tn10 min
Une ligne parent se déploie vers plusieurs lignes enfants légitimes après jointure

Que représente une ligne avant et après la jointure ?

Une commande peut contenir plusieurs lignes produit. Après la jointure, une ligne représente donc un article commandé et le numéro de commande se répète légitimement.

Le problème apparaît lorsqu’on additionne ensuite un montant stocké au niveau commande : il est répété une fois par ligne et devient surévalué.

Les noms, montants et données utilisés dans cet article sont fictifs et créés pour l’apprentissage.

La requête expliquée

Commencez par définir ce que doit représenter une ligne du résultat. Cette décision détermine les colonnes, les regroupements et les contrôles nécessaires.

L’exemple suivant isole le mécanisme principal. Exécutez-le, observez le résultat, puis modifiez une seule clause à la fois pour comprendre son effet.

Calculer la vente au grain de la ligne
SELECT p.categorie,
       SUM(l.quantite * l.prix_unitaire) AS chiffre_affaires
FROM lignes_commandes l
JOIN produits p ON p.id_produit = l.id_produit
GROUP BY p.categorie;

Lire le résultat comme un analyste

La mesure utilise les colonnes présentes au grain ligne. La catégorie vient du produit et ne change pas la quantité de lignes de détail.

Pour utiliser une mesure de commande, agrégez d’abord les lignes ou la table secondaire au niveau commande avant de joindre.

  • Compter les lignes avant et après JOIN.
  • Vérifier l’unicité de chaque clé.
  • Écrire la cardinalité attendue.
  • Réconcilier le total final avec une source indépendante.

Les erreurs qui faussent l’analyse

Une requête peut être valide sans répondre correctement à la question. Les erreurs les plus coûteuses sont souvent silencieuses : mauvais périmètre, ligne multipliée ou valeur absente interprétée comme zéro.

Avant de partager le résultat, confrontez-le à un petit échantillon calculé à la main et conservez la définition du périmètre avec la requête.

  • Ajouter DISTINCT sans comprendre la répétition.
  • Sommer un montant de commande après une jointure aux lignes.
  • Relier sur une colonne non unique.
  • Oublier qu’une deuxième table de détail multiplie encore le résultat.

Passez à la pratique

Résolvez l’exercice à trois tables et vérifiez manuellement une commande possédant deux lignes.

Le simulateur SQL de SQL.tn exécute uniquement des requêtes de lecture sur des données fictives dans votre navigateur. Vous pouvez essayer plusieurs écritures et comparer leur résultat sans installer de logiciel.

Mettez ce guide en pratique.

Ouvrez l’exercice associé, exécutez votre requête et comparez le résultat attendu.

Faire l’exercice