140
Chapitre 6 • SQL avancé
dont la formulation classique est :
select *
from
CLIENT C, COMMANDE M
where C.NCLI = M.NCLI
and
...
➤ Join on
La même requête pourrait s’écrire :
select *
from
CLIENT C join COMMANDE M
on (C.NCLI = M.NCLI)
where ...
Il est possible de construire des jointures multiples. Dans ce cas, elles sont évaluées
de gauche à droite. Ainsi, l’expression :
select *
from
CLIENT C join COMMANDE M on (C.NCLI = M.NCLI)
join DETAIL D on (M.NCOM = D.NCOM)
join PRODUIT P on (D.NPRO = P.NPRO)
where ...
est-elle équivalente à l’expression classique, plus régulière et plus lisible :
select *
from
CLIENT C,COMMANDE M, DETAIL D,PRODUIT P
where C.NCLI = M.NCLI
and
M.NCOM = D.NCOM
and
D.NPRO = P.NPRO
Attention. Les jointures étant effectuées de gauche à droite, une condition ne peut
citer que les composants (tables, alias, colonnes) des arguments de l’opérateur
auquel elle est associée, et qui sont mentionnés à sa gauche. Ainsi, dans la formulation ci-dessus, la condition de la première jointure ne peut citer que les tables
CLIENT et COMMANDE alors que la dernière peut citer les quatre tables. L’ordre de
ces opérateurs est donc important, contrairement à la formulation classique.
➤ Join using
Le comité de normalisation propose une version plus compacte du join on :
select *
from
CLIENT join COMMANDE using (NCLI)
where ...
En revanche, les colonnes ayant servi à définir cette jointure ne peuvent être
préfixées dans les clauses select et where : on peut y citer NCLI, mais pas
CLIENT.NCLI 8 . Il est permis d’utiliser le qualifieur inner, facultatif :
Chapitre 6 • SQL avancé
dont la formulation classique est :
select *
from
CLIENT C, COMMANDE M
where C.NCLI = M.NCLI
and
...
➤ Join on
La même requête pourrait s’écrire :
select *
from
CLIENT C join COMMANDE M
on (C.NCLI = M.NCLI)
where ...
Il est possible de construire des jointures multiples. Dans ce cas, elles sont évaluées
de gauche à droite. Ainsi, l’expression :
select *
from
CLIENT C join COMMANDE M on (C.NCLI = M.NCLI)
join DETAIL D on (M.NCOM = D.NCOM)
join PRODUIT P on (D.NPRO = P.NPRO)
where ...
est-elle équivalente à l’expression classique, plus régulière et plus lisible :
select *
from
CLIENT C,COMMANDE M, DETAIL D,PRODUIT P
where C.NCLI = M.NCLI
and
M.NCOM = D.NCOM
and
D.NPRO = P.NPRO
Attention. Les jointures étant effectuées de gauche à droite, une condition ne peut
citer que les composants (tables, alias, colonnes) des arguments de l’opérateur
auquel elle est associée, et qui sont mentionnés à sa gauche. Ainsi, dans la formulation ci-dessus, la condition de la première jointure ne peut citer que les tables
CLIENT et COMMANDE alors que la dernière peut citer les quatre tables. L’ordre de
ces opérateurs est donc important, contrairement à la formulation classique.
➤ Join using
Le comité de normalisation propose une version plus compacte du join on :
select *
from
CLIENT join COMMANDE using (NCLI)
where ...
En revanche, les colonnes ayant servi à définir cette jointure ne peuvent être
préfixées dans les clauses select et where : on peut y citer NCLI, mais pas
CLIENT.NCLI 8 . Il est permis d’utiliser le qualifieur inner, facultatif :
