Jointure (JOIN ON)
Impossible d'accéder à la ressource audio ou vidéo à l'adresse :
La ressource n'est plus disponible ou vous n'êtes pas autorisé à y accéder. Veuillez vérifier votre accès puis recharger la vidéo.
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éfinition : Jointure
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.
Syntaxe : Jointure par la clause ON
SELECT *
FROM R1 INNER JOIN R2
ON <condition>
Exemple :

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 :
CREATE TABLE parent (
id INTEGER PRIMARY KEY,
nom VARCHAR(255),
prenom VARCHAR(255),
age INTEGER CHECK (age > 0)
);
INSERT INTO parent VALUES (1, 'Brasseur', 'Alexandre', 91);
INSERT INTO parent VALUES (2, 'Brasseur', 'Pierre', 67);
CREATE TABLE enfant (
id INTEGER PRIMARY KEY,
nom VARCHAR(255),
prenom VARCHAR(255),
age INTEGER CHECK (age > 0),
parent INTEGER NOT NULL,
FOREIGN KEY (parent) REFERENCES parent(id)
);
INSERT INTO enfant VALUES (3, 'Brasseur', 'Claude', 42, 2);
SELECT e.prenom, e.nom, p.prenom AS parent
FROM enfant e INNER JOIN parent p
ON e.parent=p.id;
prenom | nom | parent
--------+----------+--------
Claude | Brasseur | Pierre
Syntaxe : Jointure par la clause WHERE
On peut aussi écrire une jointure comme la composition d'un produit et d'une restriction :
SELECT *
FROM R1, R2, Ri
WHERE <condition>
Avec condition
permettant de joindre des attributs des Ri
Exemple :
SELECT e.prenom, e.nom, p.prenom AS parent
FROM enfant e, parent p
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 :
SELECT *
FROM R1 JOIN R2
ON <condition>
Impossible d'accéder à la ressource audio ou vidéo à l'adresse :
La ressource n'est plus disponible ou vous n'êtes pas autorisé à y accéder. Veuillez vérifier votre accès puis recharger la vidéo.