86
Chapitre 5 • Le langage SQL DML
3. Les colonnes en correspondance sont respectivement NCLI dans CLIENT et
NCLI dans COMMANDE.
4. D’où la requête :
from CLIENT
where LOCALITE = 'POITIERS'
and
NCLI not in (select NCLI
from
COMMANDE
where DATECOM like '%2005')
5.3.4 Références multiples à une même table
a) Premiers exemples
Une sous-requête peut être définie sur la même table que la requête qui la contient.
La requête suivante répond à la question : Quels sont les clients qui habitent dans la
même localité 17 que le client n° B512?
select *
from
CLIENT
where LOCALITE in ( select LOCALITE
from
CLIENT
where NCLI = 'B512')
La requête ci-dessous recherche les commandes qui spécifient une quantité du
produit PA60 inférieure à celle que spécifie la commande 30182 pour ce même
produit.
select *
from
COMMANDE
where NCOM in (select NCOM
from
DETAIL
where NPRO = 'PA60'
and
QCOM < (select QCOM
from
DETAIL
where NPRO = 'PA60'
and
NCOM = '30182'))
Il n’y a ici aucune confusion possible quant à savoir à quelle ligne de DETAIL font
référence les noms NPRO et NCOM de la deuxième sous-requête. La règle est qu’ils
sont relatifs à la requête la plus emboîtée dont la table contient une colonne de ce
nom. On notera la double apparition de la condition NPRO = ’PA60’. Pourquoi ?
On peut forcer cette règle de deux manières :
• si deux tables ont deux colonnes de même nom, on pourra préfixer le nom de la
colonne du nom de la table. On écrira par exemple COMMANDE.NCLI et
CLIENT.NCLI afin de distinguer les deux colonnes de nom NCLI dans le
schéma;
17. On notera que le client B512 apparaît dans le résultat. On pourrait l’en exclure aisément.
Comment ?
Précédent

- 86/436

Suivant