Cours de bases de données,
http://sql.bdpedia.fr
Construction d’une requête SQL
1Philippe Rigaux
Construction d’une requête SQL
Nous savons interpréter une requête SQL
• Le résultat d’une requête est une relation constituée de nuplets.
• Chaque nuplet du résultat est construit à partir d’un ensemble de n nuplets
t1 , t2 , · · · , tn provenant de la base de données.
• Ces n nuplets doivent satisfaire un ensemble de conditions (exprimé par une
formule)
La clause from sert à définir les t1 , t2 , · · · , tn , la clause •where à définir les conditions,
la clause select à construire un nuplet-résultat à partir des t1 , t2 , · · · , tn .
Dans cette session nous étudions le processus (mental) de conception d’une requête.
Ces diapositives correspondent au support en ligne disponible
sur le site http://sql.bdpedia.fr/
2
Etape prélable : comprendre le schéma
Il faut savoir visualiser les tables, et les liens (clé primaire, clé étrangère).
3
Imaginer une requête = visualiser les nuplets
nécessaires
Exemple trivial : quel âge a Gérard Depardieu ?
4
La requête
La requête est une transcription directe de la visualisation.
select annéeNaissance
from Artiste as a
where a.nom=’Depardieu’
Pour l’instant tout est simple.
5
Souvent il faut plusieurs nuplets
Exemple les films avec Gérard Depardieu ?
6
La requête
select f.titre
from Artiste as a, Rôle as r, Film as f
where a.nom=’Depardieu’
and a.idArtiste = r.idActeur
and r.idFilm = f.idFilm
La requête est encore une transcription directe de la visualisation.
7
Les films avec C. Deneuve et G. Depardieu
8
La requête
select *
from Artiste as a1, Artiste as a2, Rôle as r1,
Rôle as r2, Film as f
where a1.nom=’Depardieu’
and a2.nom=’Deneuve’
and a1.idArtiste = r1.idActeur
and a2.idArtiste = r2.idActeur
and r1.idFilm = f.idFilm
and r2.idFilm = f.idFilm
9
Les films réalisés par Q. Tarantino en 1994
10
La requête
select *
from Artiste as a, Film as f
where a.nom=’Tarantino’
and f.année = 1994
and a.idArtiste = f.idRéalisateur
11
Les films réalisés par Q. Tarantino en 1994 dans
lesquels il joue
12
À retenir
La démarche mentale pour construire une requête SQL est (toujours) la suivante
• On détermine les nuplets (et leur table) nécessaires pour construire un nuplet du
résultat
⇒ ça définit le from
• On détermine les conditions que doivent satisfaire ces nuplets
⇒ ça définit le where
Important : une condition peut être définie par une sous-requête (résultat vide ou
non)
• Il ne reste plus qu’à “piocher” dans les nuplets pour constituer le résultat
⇒ ça définit le select et la requête complète.
13