Plan
Introduction à SQL
Introduction
Créer, supprimer et remplir une table
Interroger une base de données : SELECT
Les jointures
Fonctions d’agrégation
Regroupements
Les opérateurs ensemblistes
Requêtes imbriquées
Résumé des notions abordées
03 jan 2012 / Rév. 2 - page 95 sur 246
Requêtes imbriquées
◮ Parfois la valeur d’un test doit être calculé comme le résultat
d’une autre requête
◮ Une requêtes imbriquée, ou sous-requête, est une commande
SELECT dans une autre commande
◮ Une sous-requête doit toujours être entre parenthèses
SELECT ...
requête FROM ...
externe WHERE <expr> <ope> (SELECT ...
FROM ... requête
WHERE ...) imbriquée
03 jan 2012 / Rév. 2 - page 96 sur 246
Fonctions de sous-requêtes
◮ Le résultat d’une requête imbriquée est une table, i.e. un ensemble
de n-uplets
◮ Les fonctions booléennes ci-dessous prennent en paramètre le
résultat d’une sous-requête
1. <expr> [NOT] IN (<sous-requete>) : vrai si la valeur est
présente dans cette colonne, la sous-requête ne doit comporter qu’une
colonne
2. <expr> <ope> [ANY|ALL] (<sous-requete>) : vrai si une
(ANY) ou toutes les lignes (ALL) de la sous-requête vérifient la
comparaison, la sous-requête ne doit comporter qu’une colonne
3. [NOT] EXISTS (<sous-requete>) : vrai si la sous-requête
retourne au moins une ligne
03 jan 2012 / Rév. 2 - page 97 sur 246
Exemples de requêtes I
1. Liste des acteurs n’ayant pas joué dans Le parrain
Film Acteur Jouer
idFilm titre budget recettes idActeur prenom nom idActeur idFilm role
... ... ... ... ... ... ... ... ... ...
... ... ... ... ... ... ... ... ... ...
03 jan 2012 / Rév. 2 - page 98 sur 246
Exemples de requêtes I
1. Liste des acteurs n’ayant pas joué dans Le parrain
SQL SELECT *
FROM Acteur
WHERE idActeur NOT IN (
SELECT idActeur
FROM Jouer NATURAL JOIN Film
WHERE titre=’Le parrain’)
Film Acteur Jouer
idFilm titre budget recettes idActeur prenom nom idActeur idFilm role
... ... ... ... ... ... ... ... ... ...
... ... ... ... ... ... ... ... ... ...
03 jan 2012 / Rév. 2 - page 98 sur 246
Exemples de requêtes II
1. Films ayant un budget supérieur à celui du film Les blues brothers
Film Acteur Jouer
idFilm titre budget recettes idActeur prenom nom idActeur idFilm role
... ... ... ... ... ... ... ... ... ...
... ... ... ... ... ... ... ... ... ...
03 jan 2012 / Rév. 2 - page 99 sur 246
Exemples de requêtes II
1. Films ayant un budget supérieur à celui du film Les blues brothers
SQL SELECT *
FROM Film
WHERE budget > ANY (
SELECT budget
FROM Film
WHERE titre = "Les blues Brothers")
◮ Puisque la sous-requête retourne une seule valeur, il est possible de
ne mettre que l’opérateur >
Film Acteur Jouer
idFilm titre budget recettes idActeur prenom nom idActeur idFilm role
... ... ... ... ... ... ... ... ... ...
... ... ... ... ... ... ... ... ... ...
03 jan 2012 / Rév. 2 - page 99 sur 246
Exemples de requêtes III
1. Acteurs ayant joué dans aucun film
Film Acteur Jouer
idFilm titre budget recettes idActeur prenom nom idActeur idFilm role
... ... ... ... ... ... ... ... ... ...
... ... ... ... ... ... ... ... ... ...
03 jan 2012 / Rév. 2 - page 100 sur 246
Exemples de requêtes III
1. Acteurs ayant joué dans aucun film
SQL SELECT *
FROM Acteur
WHERE NOT EXISTS (
SELECT *
FROM Jouer
WHERE Acteur.idActeur = Jouer.idActeur )
◮ Les deux requêtes sont corrélées, la requête imbriquée dépend de la
valeur de idActeur
Film Acteur Jouer
idFilm titre budget recettes idActeur prenom nom idActeur idFilm role
... ... ... ... ... ... ... ... ... ...
... ... ... ... ... ... ... ... ... ...
03 jan 2012 / Rév. 2 - page 100 sur 246
Plan
Introduction à SQL
Introduction
Créer, supprimer et remplir une table
Interroger une base de données : SELECT
Les jointures
Fonctions d’agrégation
Regroupements
Les opérateurs ensemblistes
Requêtes imbriquées
Résumé des notions abordées
03 jan 2012 / Rév. 2 - page 101 sur 246
Résumé des notions abordées
◮ Créer, supprimer et remplir des tables : CREATE, DROP, INSERT
◮ Requêtes simples : SELECT ... FROM ... WHERE ...
◮ Jointures : NATURAL JOIN, R1 JOIN R2 ON condition,
[LEFT|RIGHT|FULL] OUTER JOIN
◮ Fonctions d’agrégation : COUNT(), AVG(), MAX(), MIN(), SUM()
◮ Regroupements : GROUP BY ... HAVING ...
◮ Opérateurs ensemblistes : UNION, INTERSECT, EXCEPT
◮ Requêtes imbriquées : IN, ANY|ALL, EXISTS, corrélation
03 jan 2012 / Rév. 2 - page 102 sur 246