5.3 Sélection utilisant plusieurs tables : les sous-requêtes
87
© Dunod – La photocopie non autorisée est un délit.
• on peut également attribuer un synonyme, dit alias de table, à un nom de table
apparaissant dans une clause from. Si nécessaire, on qualifiera le nom de
colonne de ce synonyme. Le terme as est facultatif, et sera omis à l’occasion.
select *
from
PRODUIT as P1
where P1.PRIX > 123
b) Les sous-requêtes corrélées
Dans certaines formes, l’alias de table est utilisé pour établir une corrélation entre la
requête principale et une sous-requête. A titre d’illustration, exprimons la requête
suivante : sélectionner les clients dont le compte est supérieur à la moyenne des
comptes des clients de la même commune.
select NCLI, NOM, LOCALITE, COMPTE
from
CLIENT as C
where COMPTE > (select avg(COMPTE)
from
CLIENT
where LOCALITE = C.LOCALITE)
order by LOCALITE, COMPTE, NCLI 18
Ce qui nous donne :
c) Extension des opérateurs de comparaison
Si la sous-requête renvoie une seule ligne, il est permis d’utiliser les opérateurs de
comparaison classiques :
select *
from
CLIENT
where COMPTE > ( select COMPTE
from
CLIENT where NCLI = 'C400')
De même, l’opérateur "in" pourra s’écrire "=" et "not in" s’écrira aussi "<>".
18. Cette clause, qui peut être ignorée, sera expliquée plus tard.
NCLI
NOM
LOCALITE
COMPTE
C123
L422
B112
D063
C003
F011
K729
MERCIER
FRANCK
HANSENNE
MERCIER
AVRON
PONCELET
NEUMAN
Namur
Namur
Poitiers
Toulouse
Toulouse
Toulouse
Toulouse
-2300
0
1250
-2250
-1700
0
0
87
© Dunod – La photocopie non autorisée est un délit.
• on peut également attribuer un synonyme, dit alias de table, à un nom de table
apparaissant dans une clause from. Si nécessaire, on qualifiera le nom de
colonne de ce synonyme. Le terme as est facultatif, et sera omis à l’occasion.
select *
from
PRODUIT as P1
where P1.PRIX > 123
b) Les sous-requêtes corrélées
Dans certaines formes, l’alias de table est utilisé pour établir une corrélation entre la
requête principale et une sous-requête. A titre d’illustration, exprimons la requête
suivante : sélectionner les clients dont le compte est supérieur à la moyenne des
comptes des clients de la même commune.
select NCLI, NOM, LOCALITE, COMPTE
from
CLIENT as C
where COMPTE > (select avg(COMPTE)
from
CLIENT
where LOCALITE = C.LOCALITE)
order by LOCALITE, COMPTE, NCLI 18
Ce qui nous donne :
c) Extension des opérateurs de comparaison
Si la sous-requête renvoie une seule ligne, il est permis d’utiliser les opérateurs de
comparaison classiques :
select *
from
CLIENT
where COMPTE > ( select COMPTE
from
CLIENT where NCLI = 'C400')
De même, l’opérateur "in" pourra s’écrire "=" et "not in" s’écrira aussi "<>".
18. Cette clause, qui peut être ignorée, sera expliquée plus tard.
NCLI
NOM
LOCALITE
COMPTE
C123
L422
B112
D063
C003
F011
K729
MERCIER
FRANCK
HANSENNE
MERCIER
AVRON
PONCELET
NEUMAN
Namur
Namur
Poitiers
Toulouse
Toulouse
Toulouse
Toulouse
-2300
0
1250
-2250
-1700
0
0
