5.3 Sélection utilisant plusieurs tables : les sous-requêtes
89
© Dunod – La photocopie non autorisée est un délit.
Les quantificateurs any (et son synonyme some) et all permettent, quant à eux, de
comparer une valeur à celles d’un ensemble défini par une sous-requête. any signifie
qu’au moins un élément de l’ensemble satisfait la comparaison et all signifie que
tous les éléments la satisfont.
La requête suivante désigne les détails de commande spécifiant la quantité
minimum du produit PA60, c’est-à-dire tels qu’il n’existe pas de détails spécifiant
une quantité inférieure :
select *
from
DETAIL
where QCOM <= all (select QCOM
from
DETAIL
where NPRO = 'PA60')
and
NPRO = 'PA60'
La condition QCOM <= all (select QCOM from DETAIL where
NPRO = 'PA60') s’interprète ainsi : la valeur de QCOM (de la ligne de DETAIL
courante) est inférieure ou égale à chacun des éléments de (select QCOM from
DETAIL where NPRO = 'PA60').
Quant à la requête ci-dessous, elle désigne les détails de commande de PA60 dont
la quantité commandée n’est pas minimale :
select *
from
DETAIL
where QCOM > any ( select QCOM
from
DETAIL
where NPRO = 'PA60')
and
NPRO = ’PA60’
La condition QCOM > any (select QCOM from DETAIL where NPRO =
'PA60') s’interprète comme suit : la valeur de QCOM est supérieure à au moins un
des éléments de (select QCOM from DETAIL where NPRO = 'PA60').
On notera l’équivalence entre les expressions :
in
≡ = any
not in ≡ <> all
b) Sous-requête et clé étrangère multi-composant
Reportons-nous au schéma de la figure 3.9, et recherchons, comme nous l’avons
déjà fait, les comptes auxquels ont été attachés des achats faits le 23-04-2005. Les
quantificateurs ensemblistes nous permettent d’exprimer cette requête d’une
manière élégante :
select *
from
COMPTE C
where exists ( select *
from
ACHAT
where NCLI = C.NCLI
and
NFOURN = C.NFOURN
and
DATEA = '23-04-2005'))
Précédent

- 89/436

Suivant