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.

FondamentalJointure 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 :

Join - A et B étant 2 ensemblesInformations[1]
1
SELECT *       -- ou choix des attibuts de projection
2
FROM table1
3
JOIN table2    --  ou table1 INNER JOIN table2
4
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

Table notes

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

Table mentions

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 :

1
SELECT Nom, Note, Mention
2
FROM notes
3
JOIN mentions
4
ON notes.NSI = mentions.Note ;

qui renverra

1
Nom         Note        Mention         
2
----------  ----------  ----------------
3
Marion      15          Très bien       
4
Nicolas     12          Honorable       
5
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.

1
SELECT Nom, NSI, Mention
2
FROM notes
3
JOIN mentions
4
ON notes.NSI = mentions.Note ;

On pourra améliorer la lecture avec des AS pour lever les ambiguïtés possibles :

1
SELECT Nom, Note AS NOTE_NSI, Mention AS Mention_NSI
2
FROM notes AS a
3
JOIN mentions AS b
4
ON a.NSI = b.Note ;

qui retourne :

1
Nom         Note_NSI    Mention_NSI     
2
----------  ----------  ----------------
3
Marion      15          Très bien 
4
Nicolas     12          Honorable       
5
Tom         10          Peut mieux faire

RemarqueJOIN = INNER JOIN

Cette requête renvoie exactement la même chose :

1
SELECT Nom, Note AS NOTE_NSI, Mention_NSI
2
FROM notes AS a
3
INNER JOIN mentions AS b
4
ON a.NSI = b.Note ;

ComplémentCré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 :

1
CREATE TABLE Appreciations 
2
AS
3
SELECT Nom, Note AS NOTE_NSI, Mention_NSI
4
FROM notes AS a
5
JOIN mentions AS b
6
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.

Différents types de jointure de tablesInformations[2]