Jointure (JOIN ON)

Informations[1]

Objectif

  • Savoir combiner les informations issues de plusieurs tables.

Mise en situation

Une base de données relationnelle est rarement composée d'une seule table, principalement pour éviter la duplication d'informations.

On pourra par exemple imaginer la base de données d'une messagerie instantanée, qui gère dans une table les messages, et dans une autre table les utilisateurs. Ces deux tables sont liées par une clé étrangère.

Mais cette séparation pose un problème : comment récupérer le pseudonyme de l'auteur d'un message, puisque ce pseudonyme est stocké dans une autre table que le message lui-même ?

C'est l'objet des jointures, qui permettent de combiner les données issues de plusieurs tables.

DéfinitionJointure

Une jointure est un type de sélection pour consulter les données de plusieurs tables qui se base sur les valeurs jointes de certains des attributs de ces tables.

SyntaxeJointure par la clause ON

1
SELECT *
2
FROM R1 INNER JOIN R2 
3
ON <condition>

Exemple

Exemple de jointure (SQL et Algèbre)

Méthode

  • Comme une jointure implique plusieurs tables, on utilise les alias de table pour simplifier l'écriture des requêtes.

  • Il est également fréquent d'utiliser des alias d'attribut pour différencier des attributs qui ont le même nom dans les tables jointes.

Exemple

1
CREATE TABLE parent (
2
id INTEGER PRIMARY KEY,
3
nom VARCHAR(255),
4
prenom VARCHAR(255), 
5
age INTEGER CHECK (age > 0)
6
);
7
8
INSERT INTO parent VALUES (1, 'Brasseur', 'Alexandre', 91);
9
INSERT INTO parent VALUES (2, 'Brasseur', 'Pierre', 67);
1
CREATE TABLE enfant (
2
id INTEGER PRIMARY KEY,
3
nom VARCHAR(255),
4
prenom VARCHAR(255), 
5
age INTEGER CHECK (age > 0),
6
parent INTEGER NOT NULL,
7
FOREIGN KEY (parent) REFERENCES parent(id)
8
);
9
10
INSERT INTO enfant VALUES (3, 'Brasseur', 'Claude', 42, 2);
1
SELECT e.prenom, e.nom, p.prenom AS parent
2
FROM enfant e INNER JOIN parent p
3
ON e.parent=p.id;
1
 prenom |   nom    | parent 
2
--------+----------+--------
3
 Claude | Brasseur | Pierre

SyntaxeJointure par la clause WHERE

On peut aussi écrire une jointure comme la composition d'un produit et d'une restriction :

1
SELECT *
2
FROM R1, R2, Ri
3
WHERE <condition>

Avec condition permettant de joindre des attributs des Ri

Exemple

1
SELECT e.prenom, e.nom, p.prenom AS parent
2
FROM enfant e, parent p
3
WHERE e.parent=p.id;

Complément

Le mot-clé INNER est optionnel car c'est le mode par défaut d'une jointure (on parle de jointure interne), on peut donc également écrire :

1
SELECT *
2
FROM R1 JOIN R2 
3
ON <condition>