🔄sql

Les jointures SQL expliquees avec des schemas visuels

30 mars 2026 5 min de lecture

Pourquoi les jointures sont essentielles en SQL ?

En NSI, quand tu commences à travailler avec des bases de données, tu te rends vite compte que les informations sont souvent éclatées dans plusieurs tables. Imagine une base de données pour un lycée : tu as une table Élèves avec les noms et prénoms, et une table Notes avec les résultats. Pour savoir qui a eu quelle note, il faut relier ces deux tables. C'est exactement le rôle des jointures (JOIN en anglais). Elles sont le cœur de la puissance de SQL pour interroger des données complexes. Sans elles, tu serais obligé de faire des requêtes séparées et de tout recoller toi-même dans ton programme, ce qui serait long et peu efficace.

Le principe de base : les clés primaires et étrangères

Avant de plonger dans les jointures, il faut absolument comprendre deux concepts clés :

  • Clé primaire (PK) : Un identifiant unique pour chaque enregistrement dans une table. Par exemple, un id_eleve dans la table Élèves.
  • Clé étrangère (FK) : Une colonne dans une table qui fait référence à la clé primaire d'une autre table. Par exemple, la colonne eleve_id dans la table Notes, qui pointe vers id_eleve dans la table Élèves.

C'est sur ces liens entre clés primaires et étrangères que les jointures opèrent leur magie. Pour nos exemples, nous allons utiliser deux tables simples :

Table `eleves`
id | nom
1 | Alice
2 | Bruno
3 | Clara

Table `notes`
id | eleve_id | note
1 | 1 | 15
2 | 1 | 17
3 | 3 | 12

INNER JOIN : La jointure par défaut (l'intersection)

C'est la jointure la plus courante. INNER JOIN ne retourne que les enregistrements qui ont une correspondance dans les deux tables. Si on reprend nos schémas, c'est comme si on prenait seulement la zone où les deux cercles (les deux tables) se chevauchent.

Schéma mental : Imagine deux ensembles qui s'intersectent. Seuls les éléments présents dans les deux ensembles sont sélectionnés.

Requête pour lier les élèves à leurs notes :

SELECT eleves.nom, notes.note
FROM eleves
INNER JOIN notes ON eleves.id = notes.eleve_id;

Résultat :
Alice | 15
Alice | 17
Clara | 12

Note que Bruno n'apparaît pas car il n'a aucune note dans la table `notes`. Seules les correspondances parfaites sont conservées.

LEFT JOIN et RIGHT JOIN : Inclure tous les éléments d'un côté

Parfois, tu veux voir tous les élèves, même ceux qui n'ont pas de note. C'est là que LEFT JOIN (jointure gauche) entre en jeu. Elle retourne tous les enregistrements de la table de gauche (celle après FROM), et les correspondances de la table de droite. S'il n'y a pas de correspondance, les colonnes de la table de droite contiennent NULL.

Schéma mental : Tu prends tout le cercle de gauche, et tu y attaches les parties du cercle de droite qui s'y superposent. Le reste du cercle de gauche reste visible, mais vide de l'autre côté.

SELECT eleves.nom, notes.note
FROM eleves
LEFT JOIN notes ON eleves.id = notes.eleve_id;

Résultat :
Alice | 15
Alice | 17
Bruno | NULL
Clara | 12

Bruno apparaît maintenant, mais avec une note à NULL. RIGHT JOIN fonctionne de manière symétrique : elle retourne tous les enregistrements de la table de droite. En pratique, LEFT JOIN est beaucoup plus utilisé.

FULL OUTER JOIN : L'union complète

Cette jointure, parfois appelée FULL JOIN, est moins courante mais très utile pour un audit complet. Elle retourne tous les enregistrements des deux tables, qu'il y ait une correspondance ou non. Là où il n'y a pas de correspondance, les colonnes de l'autre table contiennent NULL.

Schéma mental : Tu prends l'union des deux cercles en entier. Tous les éléments des deux tables sont présents.

SELECT eleves.nom, notes.note
FROM eleves
FULL OUTER JOIN notes ON eleves.id = notes.eleve_id;

Résultat (théorique, selon nos données) :
Alice | 15
Alice | 17
Bruno | NULL
Clara | 12
NULL | [note sans élève?] -> Dans notre exemple, ce cas n'existe pas.

Attention, MySQL ne supporte pas nativement FULL OUTER JOIN. Il faut simuler cela avec une UNION de LEFT JOIN et RIGHT JOIN. C'est une bonne question d'approfondissement !

Résumé visuel et tableau comparatif

Pour bien fixer les idées, voici un tableau récapitulatif des 4 jointures principales :

  • INNER JOIN : Intersection. Que les correspondances parfaites.
  • LEFT JOIN : Tout depuis la table principale (gauche) + correspondances à droite.
  • RIGHT JOIN : Tout depuis la table secondaire (droite) + correspondances à gauche.
  • FULL OUTER JOIN : Union totale des deux tables.

Le meilleur conseil pour les maîtriser ? Dessine-toi les schémas en cercle (diagrammes de Venn) au brouillon quand tu construis ta requête. Demande-toi toujours : "Est-ce que je veux tous les éléments de cette table, même sans correspondance ?"

Aller plus loin : jointures multiples et astuces NSI

Dans un vrai projet, tu auras souvent besoin d'enchaîner les jointures. Par exemple, pour relier Élèves -> Inscriptions -> Matières. La logique reste la même, tu ajoutes simplement un autre JOIN ... ON ....

SELECT eleves.nom, matieres.nom_matiere
FROM eleves
INNER JOIN inscriptions ON eleves.id = inscriptions.eleve_id
INNER JOIN matieres ON inscriptions.matiere_id = matieres.id;

Astuce pour l'épreuve pratique : Sois méthodique. Identifie bien tes tables sources (FROM), détermine le type de jointure dont tu as besoin, et écris tes conditions ON avec soin en reliant les clés primaires et étrangères. Un alias (ex: FROM eleves AS e) peut rendre tes requêtes plus lisibles.

📚 Pour aller plus loin

Questions fréquentes

Quelle est la différence entre INNER JOIN et LEFT JOIN ?

INNER JOIN ne retourne que les lignes qui ont une correspondance dans LES DEUX tables. LEFT JOIN retourne TOUTES les lignes de la table de gauche (celle après FROM), et seulement les correspondances de la table de droite. Les lignes sans correspondance à droite auront des valeurs NULL.

Est-ce que ON et WHERE, c'est la même chose dans une jointure ?

Non ! La condition ON spécifie COMMENT les tables sont reliées (ex: eleves.id = notes.eleve_id). La clause WHERE, elle, filtre les résultats APRÈS que la jointure a été effectuée. Mettre une condition de liaison dans WHERE peut parfois donner le même résultat, mais c'est une mauvaise pratique et cela peut nuire à la lisibilité et aux performances.

Comment faire une FULL OUTER JOIN dans MySQL ?

MySQL ne supporte pas directement FULL OUTER JOIN. Il faut la simuler en combinant un LEFT JOIN et un RIGHT JOIN avec l'opérateur UNION. Par exemple : `(SELECT * FROM table1 LEFT JOIN table2 ON ...) UNION (SELECT * FROM table1 RIGHT JOIN table2 ON ...)`. L'UNION élimine les doublons, donnant ainsi l'équivalent d'une union complète.

Bravo ! Tu as lu cet article
Inscris-toi pour sauvegarder ta progression et gagner des XP
Creer mon compte
jointures SQLJOIN NSI
Pixel