114
Chapitre 5 • Le langage SQL DML
dents, ou par son alias en cas d’expression calculée, comme dans l’exemple cidessous, qui présente les localités par valeurs décroissantes de population de clients :
select LOCALITE, count(*) as POPULATION, sum(COMPTE)
from
CLIENT
group by LOCALITE
order by POPULATION desc
Certains SGBD n’admettent pas l’usage d’un alias de colonne dans la clause order
by; on utilisera alors le numéro d’ordre de la colonne : order by 2 desc.
L’exemple suivant définit un ordre selon une expression qui n’apparaît pas dans
la clause select :
select NCOM, NPRO, QCOM
from
DETAIL D, PRODUIT P
where D.NPRO = P.NPRO
order by NCOM, QCOM*PRIX desc
L’ordre des composants du critère d’ordre n’est pas indifférent : order by LOCALITE,CAT donnera une autre séquence que order by CAT,LOCALITE.
5.7 INTERPRÉTATION D’UNE REQUÊTE
Certaines requêtes étant relativement complexes, on pourra, pour interpréter leur
signification, considérer utilement la procédure d’évaluation suivante. Il s’agit
d’une évaluation fictive, le SGBD utilisant généralement d’autres procédés plus efficaces pour construire le résultat.
Pour une requête monotable :
• on considère la table spécifiée dans la clause from;
• on sélectionne les lignes sur base de la clause where;
• on classe ces lignes en groupes comme spécifié dans la clause group by;
• on ne retient que les groupes qui vérifient la cause having;
• les lignes des groupes sont ordonnées selon la clause order by éventuelle;
• de chacune des lignes, on extrait les valeurs demandées dans la clause select.
Pour une requête multitable :
• on considère les tables spécifiées dans la clause from;
• on effectue la jointure de ces tables selon le critère de jointure de la clause
where;
• on sélectionne les lignes de la jointure sur la base des autres conditions de la
clause where;
• on classe ces lignes en groupes comme spécifié dans la clause groupe by;
• on ne retient que les groupes qui vérifient la cause having;
• les lignes des groupes sont ordonnées selon la clause order by éventuelle;
• de chacune des lignes, on extrait les valeurs demandées dans la clause
select.
Chapitre 5 • Le langage SQL DML
dents, ou par son alias en cas d’expression calculée, comme dans l’exemple cidessous, qui présente les localités par valeurs décroissantes de population de clients :
select LOCALITE, count(*) as POPULATION, sum(COMPTE)
from
CLIENT
group by LOCALITE
order by POPULATION desc
Certains SGBD n’admettent pas l’usage d’un alias de colonne dans la clause order
by; on utilisera alors le numéro d’ordre de la colonne : order by 2 desc.
L’exemple suivant définit un ordre selon une expression qui n’apparaît pas dans
la clause select :
select NCOM, NPRO, QCOM
from
DETAIL D, PRODUIT P
where D.NPRO = P.NPRO
order by NCOM, QCOM*PRIX desc
L’ordre des composants du critère d’ordre n’est pas indifférent : order by LOCALITE,CAT donnera une autre séquence que order by CAT,LOCALITE.
5.7 INTERPRÉTATION D’UNE REQUÊTE
Certaines requêtes étant relativement complexes, on pourra, pour interpréter leur
signification, considérer utilement la procédure d’évaluation suivante. Il s’agit
d’une évaluation fictive, le SGBD utilisant généralement d’autres procédés plus efficaces pour construire le résultat.
Pour une requête monotable :
• on considère la table spécifiée dans la clause from;
• on sélectionne les lignes sur base de la clause where;
• on classe ces lignes en groupes comme spécifié dans la clause group by;
• on ne retient que les groupes qui vérifient la cause having;
• les lignes des groupes sont ordonnées selon la clause order by éventuelle;
• de chacune des lignes, on extrait les valeurs demandées dans la clause select.
Pour une requête multitable :
• on considère les tables spécifiées dans la clause from;
• on effectue la jointure de ces tables selon le critère de jointure de la clause
where;
• on sélectionne les lignes de la jointure sur la base des autres conditions de la
clause where;
• on classe ces lignes en groupes comme spécifié dans la clause groupe by;
• on ne retient que les groupes qui vérifient la cause having;
• les lignes des groupes sont ordonnées selon la clause order by éventuelle;
• de chacune des lignes, on extrait les valeurs demandées dans la clause
select.
