88
CHAPITRE 4. LANGAGE SQL
Définition de deux tables pour les exemples qui suivent
Afin d’illustrer les opérations de jointure, considérons les tables realisateur et film définies de la
manière suivante :
create table realisateur (
id_real integer primary key,
nom varchar(16),
prenom varchar(16)
);
create table film (
num_film integer primary key,
id_real integer,
titre varchar(32)
);
On notera que dans la table film, l’attribut id_real correspond à une clef étrangère et aurait dû être
défini de la manière suivante : id_real integer references realisateur. Nous ne l’avons pas fait
dans le but d’introduire des filmsdont le réalisateur n’existe pas dans la table realisateur afind’illustrer
les différentes facettes des opérations de jointure.
La table realisateur contient les lignes suivantes :
id_real |
nom
| prenom
---------+-----------+---------
1 | von Trier | Lars
4 | Tarantino | Quentin
3 | Eastwood | Clint
2 | Parker
| Alan
La table film contient les lignes suivantes :
id_film | id_real |
titre
---------+---------+----------------------------
1 |
1 | Dogville
2 |
1 | Breaking the waves
3 |
5 | Faux-Semblants
4 |
5 | Crash
5 |
3 | Chasseur blanc, coeur noir
Exemples de jointures internes
La jointure naturelle entre les tables film et réalisateur peut s’écrire indifféremment de l’une des
manières suivante :
SELECT * FROM film NATURAL JOIN realisateur
SELECT * FROM film NATURAL INNER JOIN realisateur;
SELECT * FROM film JOIN realisateur USING (id_real);
SELECT * FROM film INNER JOIN realisateur USING (id_real);
pour produire le résultat suivant :
id_real | id_film |
titre
|
nom
| prenom
---------+---------+----------------------------+-----------+--------
1 |
1 | Dogville
| von Trier | Lars
1 |
2 | Breaking the waves
| von Trier | Lars
3 |
5 | Chasseur blanc, coeur noir | Eastwood | Clint
Nous aurions également pu effectuer une équi-jointure en écrivant :