6.3 Extension de la structure des requêtes SFW
139
© Dunod – La photocopie non autorisée est un délit.
Combinant cette possibilité avec les opérateurs ensemblistes, on peut aussi écrire,
pour afficher la quantité totale commandée de chaque produit :
select NPRO, TOTAL_QTE
from ( (select NPRO, sum(QCOM)
from
PRODUIT P, DETAIL D
where P.NPRO=D.NPRO
group by NPRO)
union
(select NPRO, 0
from
PRODUIT
where NPRO not in (select NPRO from DETAIL))
)
as DP(NPRO,TOTAL_QTE)
where TOTAL_QTE < 1000
On notera la définition d’un alias de table (DP) accompagnée de celle des colonnes
résultantes, ce qui permet de les utiliser dans les clauses select et where.
c) Les opérateurs de jointure
SQL propose des opérateurs explicites pour réaliser la jointure de deux ou plusieurs
tables. Leur usage peut simplifier certaines requêtes, mais aussi rendre proprement
illisibles certaines expressions, auquel cas on lui préférera celui de la formulation
étudiée en 5.4.1, plus régulière. Le langage offre cinq formes d’opérateurs, largement redondantes, et dont l’utilité peut laisser perplexe.
➤ Cross join
La forme :
select *
from
CLIENT cross join COMMANDE
where ...
est équivalente à l’expression classique du produit relationnel :
select *
from
CLIENT, COMMANDE
where ...
➤ Natural join
Si les colonnes servant à la jointure portent le même nom, et que toutes les autres
colonnes portent des noms différents dans les deux tables, on peut écrire :
select *
from
CLIENT natural join COMMANDE
where ...
139
© Dunod – La photocopie non autorisée est un délit.
Combinant cette possibilité avec les opérateurs ensemblistes, on peut aussi écrire,
pour afficher la quantité totale commandée de chaque produit :
select NPRO, TOTAL_QTE
from ( (select NPRO, sum(QCOM)
from
PRODUIT P, DETAIL D
where P.NPRO=D.NPRO
group by NPRO)
union
(select NPRO, 0
from
PRODUIT
where NPRO not in (select NPRO from DETAIL))
)
as DP(NPRO,TOTAL_QTE)
where TOTAL_QTE < 1000
On notera la définition d’un alias de table (DP) accompagnée de celle des colonnes
résultantes, ce qui permet de les utiliser dans les clauses select et where.
c) Les opérateurs de jointure
SQL propose des opérateurs explicites pour réaliser la jointure de deux ou plusieurs
tables. Leur usage peut simplifier certaines requêtes, mais aussi rendre proprement
illisibles certaines expressions, auquel cas on lui préférera celui de la formulation
étudiée en 5.4.1, plus régulière. Le langage offre cinq formes d’opérateurs, largement redondantes, et dont l’utilité peut laisser perplexe.
➤ Cross join
La forme :
select *
from
CLIENT cross join COMMANDE
where ...
est équivalente à l’expression classique du produit relationnel :
select *
from
CLIENT, COMMANDE
where ...
➤ Natural join
Si les colonnes servant à la jointure portent le même nom, et que toutes les autres
colonnes portent des noms différents dans les deux tables, on peut écrire :
select *
from
CLIENT natural join COMMANDE
where ...
