5.3 Sélection utilisant plusieurs tables : les sous-requêtes
83
© Dunod – La photocopie non autorisée est un délit.
select NCOM, DATECOM
from
COMMANDE
where NCLI in ('C123','S127','B062','L422')
Cette procédure n’est évidement pas très pratique. Il serait plus judicieux de
remplacer cette liste de valeurs par l’expression qui a permis de les extraire de la
table CLIENT. On peut en effet écrire :
select NCOM, DATECOM
from
COMMANDE
where NCLI in ( select NCLI
from
CLIENT
where LOCALITE = 'Namur')
Cette structure emboîtée correspond à l’association des tables COMMANDE et
CLIENT sur la base de valeurs identiques de NCLI. Une structure select-from qui
intervient dans une forme where est appelée une sous-requête.
Une sous-requête peut elle-même contenir une sous-requête. La requête suivante
donne les produits qui ont été commandés par au moins un client de Namur.
select *
from
PRODUIT
where NPRO in
( select NPRO
from
DETAIL
where NCOM in
( select NCOM
from
COMMANDE
where NCLI in
( select NCLI
from
CLIENT
where LOCALITE='Namur')))
5.3.2 Sous-requête et clé étrangère multi-composant
On observera que les sous-requêtes exploitent les liens entre tables formés par le
couplage d’un identifiant et d’une clé étrangère. Qu’en est-il des clés étrangères
multi-composants ? Considérons à titre d’exemple le schéma de la figure 3.9, et
recherchons les comptes auxquels ont été imputés des achats faits le 12-09-2005.
On pourra écrire la requête suivante, qui est basée sur une sous-requête qui définit
plus d’une colonne:
select *
from
COMPTE
where (NCLI,NFOURN) in ( select NCLI,NFOURN
from
ACHAT
where DATEA='12-09-2005')
Précédent

- 83/436

Suivant