SQL : jointure de tables
Définition :
Les jointures en SQL permettent d'associer plusieurs tables dans une même requête. Cela permet d'exploiter la puissance des bases de données relationnelles pour obtenir des résultats qui combinent les données de plusieurs tables de manière efficace.
Fondamental : Jointure classique JOIN
Cette commande JOIN (ou INNER JOIN) retourne les enregistrements lorsqu'il y a au moins une ligne dans chaque colonne qui correspond à la condition. La syntaxe est la suivante :

SELECT * -- ou choix des attibuts de projection
FROM table1
JOIN table2 -- ou table1 INNER JOIN table2
ON table1.attibut1 = table2.attibut2 ;
Pour lever toute ambiguïté, on peut préfixer par le nom de la table ou faire un renommage avec AS.
Exemple :
Nom | NSI | Mathématiques | Anglais | EPS | Philosophie | Histoire & Géographie |
---|---|---|---|---|---|---|
Marion | 15 | 16 | 14 | 18 | 14 | 13 |
Nicolas | 12 | 12 | 15 | 14 | 15 | 16 |
Tom | 10 | 15 | 18 | 19 | 14 | 11 |
Note | Mention |
---|---|
10 | Peut mieux faire |
11 | Passable |
12 | Honorable |
13 | Assez bien |
14 | Bien |
15 | Très bien |
16 | Excellent |
La requête de jointure pour attribuer une mention à un nom d'élève pour ses notes de NSI sera donc la suivante :
SELECT Nom, Note, Mention
FROM notes
JOIN mentions
ON notes.NSI = mentions.Note ;
qui renverra
Nom Note Mention
---------- ---------- ----------------
Marion 15 Très bien
Nicolas 12 Honorable
Tom 10 Peut mieux faire
On remarquera que l'on aurait pu écrire la requête suivante, qui aurait donné le même résultat.
SELECT Nom, NSI, Mention
FROM notes
JOIN mentions
ON notes.NSI = mentions.Note ;
On pourra améliorer la lecture avec des AS pour lever les ambiguïtés possibles :
SELECT Nom, Note AS NOTE_NSI, Mention AS Mention_NSI
FROM notes AS a
JOIN mentions AS b
ON a.NSI = b.Note ;
qui retourne :
Nom Note_NSI Mention_NSI
---------- ---------- ----------------
Marion 15 Très bien
Nicolas 12 Honorable
Tom 10 Peut mieux faire
Remarque : JOIN = INNER JOIN
Cette requête renvoie exactement la même chose :
SELECT Nom, Note AS NOTE_NSI, Mention_NSI
FROM notes AS a
INNER JOIN mentions AS b
ON a.NSI = b.Note ;
Complément : Créer une nouvelle table à partir d'une requête
Si l'on veut créer une nouvelle table à partir d'une sélection, on peut utiliser la commande suivante :
CREATE TABLE Appreciations
AS
SELECT Nom, Note AS NOTE_NSI, Mention_NSI
FROM notes AS a
JOIN mentions AS b
ON a.NSI = b.Note ;
Rappel :
De nombreuses jointures existent mais elles ne sont pas au programme de terminale NSI. Vous pouvez avoir un aperçu ici : https://sql.sh/cours/jointures
Cet article détaillé en anglais vous donnera un bel aperçu, dont voici une synthèse en image.