Jointures SQL expliquées avec exemples (Inner, Left, Right, Full)
Apprenez les jointures INNER, LEFT, RIGHT, FULL, CROSS et SELF avec deux petites tables, des requêtes claires et les résultats exacts.
- INNER JOIN : uniquement les lignes qui correspondent dans les deux tables.
- LEFT JOIN : toutes les lignes de gauche, avec les correspondances (NULL sinon).
- RIGHT JOIN : toutes les lignes de droite, avec les correspondances.
- FULL JOIN : toutes les lignes des deux tables, appariées quand c’est possible.
- Joignez sur des clés, utilisez des alias de table et indexez les colonnes de jointure.
Les vraies bases de données ne mettent pas tout dans une seule table. Les clients sont dans une table et les commandes dans une autre. Pour répondre à « quels clients ont commandé ce mois-ci ? », il faut les combiner, et c’est ce que font les jointures SQL.
Ce guide est pratique. Les jointures déroutent les débutants car les deux mêmes tables donnent des résultats différents selon le type de jointure. Avec de petites données concrètes, tout devient simple.
Jointures SQL expliquées : tables d’exemple
customers
| id | name |
|---|---|
| 1 | Asha |
| 2 | Ben |
| 3 | Chitra |
orders
| id | customer_id | total |
|---|---|---|
| 101 | 1 | 250 |
| 102 | 1 | 120 |
| 103 | 2 | 90 |
| 104 | 9 | 40 |
Chitra n’a aucune commande, et la commande 104 pointe vers un client (9) qui n’existe pas. Ces deux cas limites montrent la différence entre les types de jointure.
INNER JOIN
INNER JOIN ne renvoie que les lignes pour lesquelles la condition est vraie dans les deux tables. Les lignes sans équivalent disparaissent.
SELECT c.name, o.id AS order_id, o.total
FROM customers c
INNER JOIN orders o ON o.customer_id = c.id;
Résultat : Asha (101), Asha (102), Ben (103). Chitra et la commande 104 sont absentes. Utilisez-le quand seules les données liées vous intéressent, comme les commandes avec les détails du client. Écrire simplement JOIN revient à INNER JOIN.
LEFT JOIN
LEFT JOIN conserve toutes les lignes de la table de gauche et ajoute les lignes correspondantes de droite. Sans correspondance, les colonnes de droite valent NULL.
SELECT c.name, o.id AS order_id, o.total
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id;
Résultat : Asha (101), Asha (102), Ben (103), Chitra (NULL, NULL). Chitra apparaît désormais.
Astuce : pour trouver les clients qui n’ont jamais commandé, filtrez le NULL du côté droit : WHERE o.id IS NULL renvoie Chitra. Les testeurs s’en servent pour repérer les enregistrements orphelins ou manquants.
RIGHT JOIN et FULL JOIN
RIGHT JOIN est le miroir de LEFT JOIN et conserve toutes les lignes de droite. La plupart des gens inversent l’ordre des tables et utilisent LEFT JOIN, plus naturel à lire.
SELECT c.name, o.id AS order_id
FROM customers c
RIGHT JOIN orders o ON o.customer_id = c.id;
Le résultat inclut la commande 104 avec un nom de client NULL. FULL (OUTER) JOIN renvoie toutes les lignes des deux tables : Chitra sans commande et la commande 104 sans client.
SELECT c.name, o.id AS order_id
FROM customers c
FULL OUTER JOIN orders o ON o.customer_id = c.id;
PostgreSQL et SQL Server le prennent en charge. MySQL non : combinez alors LEFT JOIN et RIGHT JOIN avec UNION. Pour aller plus loin, le manuel PostgreSQL propose un tutoriel sur les jointures clair.
| Jointure | Lignes de gauche seules | Lignes de droite seules | Lignes correspondantes |
|---|---|---|---|
| INNER | Non | Non | Oui |
| LEFT | Oui | Non | Oui |
| RIGHT | Non | Oui | Oui |
| FULL | Oui | Oui | Oui |
CROSS JOIN et SELF JOIN
CROSS JOIN associe chaque ligne d’une table à chaque ligne de l’autre : trois clients et quatre commandes donnent douze lignes. Il est rarement utilisé, mais utile pour générer des combinaisons, par exemple des données de test pour chaque taille et couleur.
SELECT c.name, o.id
FROM customers c
CROSS JOIN orders o;
SELF JOIN joint une table à elle-même avec des alias, par exemple pour trouver le manager de chaque employé.
SELECT e.name AS employee, m.name AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;
Jointures SQL : erreurs courantes et conseils de performance
- Oublier la clause ON crée sans le vouloir un CROSS JOIN et fait exploser le nombre de lignes.
- Filtrer la table de droite dans le WHERE après un LEFT JOIN le transforme en INNER JOIN ; mettez la condition dans le ON.
- Noms de colonnes ambigus : préfixez les colonnes par l’alias de la table.
- Joindre sur des colonnes non uniques multiplie les lignes et gonfle les totaux.
- Indexez les colonnes de jointure, ne sélectionnez que les colonnes nécessaires et analysez les requêtes lentes avec
EXPLAIN.
Pourquoi les jointures comptent pour les testeurs
Les ingénieurs QA utilisent les jointures pour vérifier que les données créées via l’interface ou l’API arrivent correctement en base, et pour trouver les enregistrements orphelins. Lisez-les avec notre guide de test d’API avec Postman (en anglais). Pour les bases, voir le tutoriel SQL pour débutants (en anglais), et pour les nouveaux stockages, les bases de données vectorielles (en anglais). Pour lancer une base en local, consultez notre tutoriel Docker (en anglais).
Pour conclure
Les jointures SQL en une ligne : INNER garde les correspondances, LEFT garde tout à gauche, RIGHT tout à droite, FULL garde tout. Entraînez-vous avec deux petites tables jusqu’à prédire le résultat avant d’exécuter la requête, puis passez à trois tables et combinez les jointures avec GROUP BY.
Questions fréquentes
Quelle est la différence entre INNER JOIN et LEFT JOIN ?
INNER JOIN ne renvoie que les lignes correspondantes des deux tables. LEFT JOIN renvoie toutes les lignes de la table de gauche et remplit par NULL les colonnes de droite sans correspondance.
Quelle jointure SQL est la plus rapide ?
Aucun type n’est toujours le plus rapide. La performance dépend des index, de la taille des tables et du plan d’exécution. Indexez les colonnes de jointure et vérifiez le plan.
MySQL prend-il en charge FULL OUTER JOIN ?
Non. Dans MySQL, combinez LEFT JOIN et RIGHT JOIN avec UNION pour obtenir le même résultat.
À quoi sert un SELF JOIN ?
Un SELF JOIN compare des lignes d’une même table, par exemple pour trouver le manager de chaque employé dans une seule table employees.
Pourquoi ma jointure renvoie-t-elle des doublons ?
Les doublons apparaissent quand la colonne de jointure n’est pas unique dans l’une des tables. Vérifiez vos clés ou agrégez les données avant de joindre.
Pour aller plus loin (articles en anglais)
Besoin d’aide pour les tests, WordPress ou le SEO ?
Nous aidons les équipes à livrer de meilleurs logiciels et à développer leurs sites. Dites-nous sur quoi vous travaillez et nous proposerons la prochaine étape.
Plus de guides sur tests, IA et développement moderne
Vous avez apprécié cet article ? Choisissez un sujet et accédez directement à nos nouveaux didacticiels.
