5.4 Extraction de données de plusieurs tables (jointure)
105
© Dunod – La photocopie non autorisée est un délit.
select C.NCLI, NOM, LOCALITE
from
CLIENT C, COMMANDE M
where M.NCLI = C.NCLI
représente-t-elle (1) un client, (2) un client qui a passé une ou plusieurs commandes,
(3) une commande ?
Autre formulation : y a-t-il autant de lignes dans le résultat qu’il y a (1) de clients,
(2) de clients qui ont passé des commandes, (3) de commandes 30 ?
Aussi étrange que cela paraisse, la réponse est une commande.
La règle relative à une jointure élémentaire basée sur l’égalité identifiant/
clé étrangère est simple :
Considérons une table TA, d’identifiant primaire IA, et une table TB, de clé étrangère RA obligatoire, référençant TA (nous ignorons les autres colonnes).
Le résultat de l’évaluation de l’expression
select *
from
TA, TB
where TA.IA = TB.RA
contient autant de lignes qu’il y en a dans la table TB. Autrement dit, chaque ligne
du résultat de la jointure représente une ligne de TB. Le résultat d’une jointure de
TA et TB correspond à la population de TB ou à un de ses sous-ensembles (s’il y a
des conditions de sélection additionnelles).
En bref, le résultat d’une jointure représente des entités de la table contenant la
clé étrangère.
A titre d’exemple supplémentaire, l’expression suivante désigne des lignes de
DETAIL, et non pas des lignes de COMMANDE. En effet, il y a autant de lignes dans
le résultat qu’il y en a dans la table DETAIL :
select COMMANDE.NCOM,DATECOM,NCLI
from
COMMANDE,DETAIL
where COMMANDE.NCOM = DETAIL.NCOM
30. Pour répondre à ces questions, on ne s’arrêtera pas aux éléments de la clause select, dont le
seul but est d’induire le lecteur en erreur !
Précédent

- 105/436

Suivant