168
Chapitre 7 • Applications avancées en SQL
lement, nous pouvons l’utiliser pour illustrer ce principe. Nous donnerons ensuite
un autre exemple, sans doute plus convaincant.
Construisons une table qui à chaque numéro de client X associe le numéro de
client Y qui le suit directement On représente donc la relation d’ordre strict siégeant
parmi les valeurs de NCLI. Il existe plusieurs manières d’exprimer cette relation.
Selon la première, le client Y a le numéro le plus petit de ceux qui sont supérieurs à
celui de X, ce qui se traduit comme suit (X est représenté par l’alias prec et Y par
suiv) :
select prec.NCLI,suiv.NCLI
from
CLIENT prec, CLIENT suiv
where suiv.NCLI = (select min(NCLI)
from
CLIENT
where NCLI > prec.NCLI)
order by prec.NCLI
Une deuxième formulation consiste à rechercher les couples (X,Y) tels qu’il n’existe
pas de clients dont le numéro soit strictement compris entre ceux de X et Y 1 .
select prec.NCLI,suiv.NCLI
from
CLIENT prec, CLIENT suiv
where not exists (select *
from
CLIENT
where NCLI > prec.NCLI
and
NCLI < suiv.NCLI)
order by prec.NCLI
Ces requêtes donnent le résultat suivant :
Dans cette même catégorie de problèmes on trouvera les questions relatives aux
éléments dont le rang est compris entre I et J selon un ordre défini. Par exemple,
recherchons les 3 derniers clients, par ordre de NCLI croissant, c’est-à-dire les
1. Optimisation possible : on impose en outre dans la clause where : prec < suiv, afin d’éviter
l’examen de configurations stériles.
prec.NCLI
suiv.NCLI
B062
B112
B332
B512
. . .
K729
L422
S127
B112
B332
B512
C003
. . .
L422
S127
S712
Chapitre 7 • Applications avancées en SQL
lement, nous pouvons l’utiliser pour illustrer ce principe. Nous donnerons ensuite
un autre exemple, sans doute plus convaincant.
Construisons une table qui à chaque numéro de client X associe le numéro de
client Y qui le suit directement On représente donc la relation d’ordre strict siégeant
parmi les valeurs de NCLI. Il existe plusieurs manières d’exprimer cette relation.
Selon la première, le client Y a le numéro le plus petit de ceux qui sont supérieurs à
celui de X, ce qui se traduit comme suit (X est représenté par l’alias prec et Y par
suiv) :
select prec.NCLI,suiv.NCLI
from
CLIENT prec, CLIENT suiv
where suiv.NCLI = (select min(NCLI)
from
CLIENT
where NCLI > prec.NCLI)
order by prec.NCLI
Une deuxième formulation consiste à rechercher les couples (X,Y) tels qu’il n’existe
pas de clients dont le numéro soit strictement compris entre ceux de X et Y 1 .
select prec.NCLI,suiv.NCLI
from
CLIENT prec, CLIENT suiv
where not exists (select *
from
CLIENT
where NCLI > prec.NCLI
and
NCLI < suiv.NCLI)
order by prec.NCLI
Ces requêtes donnent le résultat suivant :
Dans cette même catégorie de problèmes on trouvera les questions relatives aux
éléments dont le rang est compris entre I et J selon un ordre défini. Par exemple,
recherchons les 3 derniers clients, par ordre de NCLI croissant, c’est-à-dire les
1. Optimisation possible : on impose en outre dans la clause where : prec < suiv, afin d’éviter
l’examen de configurations stériles.
prec.NCLI
suiv.NCLI
B062
B112
B332
B512
. . .
K729
L422
S127
B112
B332
B512
C003
. . .
L422
S127
S712
