5.3 Sélection utilisant plusieurs tables : les sous-requêtes
85
© Dunod – La photocopie non autorisée est un délit.
Figure 5.1 - Une partition de l’ensemble des commandes explicitant la portée des
requêtes Q1 et Q2. Dans un souci de généralité, on admet qu’une commande puisse
n’avoir aucun détail
La première requête correspond aux catégories C1 et C2, tandis que la seconde
correspond aux catégories C2 et C3.
b) Méthode générale
D’une manière générale, on traitera ce type de requêtes de la manière suivante.
1. On identifie les deux ensembles de lignes A et B tels que la partie critique de la
requête puisse se paraphraser sous la forme on sélectionne les A qui ne sont pas
associés à des B.
2. On repère les tables et les conditions de sélection qui définissent A et B, soient
TA where (CA) et TB where (CB).
3. On repère dans TA et TB les colonnes FA et FB constituant l’identifiant et la clé
étrangère dont l’égalité matérialise l’association.
4. On peut alors construire la requête sous la forme :
from TA
where (CA)
and
FA not in (select FB
from
TB
where (CB))
Appliquons cette procédure à un autre exemple : sélectionner les clients de Poitiers
qui n’ont pas commandé en 2005.
1. Les deux ensembles sont A = {les clients de Poitiers} et B = {les commandes
de 2005}.
2. Ils s’expriment respectivement par "CLIENT where LOCALITE = ’Poitiers’"
et "COMMANDE where DATECOM like ’%2005’".
∅
30178
30179
30182
30184
30188
30186
30185
Les commandes
C4: les commandes n’ayant qu’un
seul détail, qui
spécifie PA60
C3: les commandes ayant plusieurs
détails dont un qui
spécifie PA60
C2: les commandes
ayant des détails,
mais dont aucun ne
spécifie PA60
C1: les commandes sans détails
Q1: les commandes n’ayant aucun
détail qui spécifie
PA60
Q2: les commandes
ayant au moins un
détail qui ne spécifie pas PA60
Précédent

- 85/436

Suivant