5.4 Extraction de données de plusieurs tables (jointure)
103
© Dunod – La photocopie non autorisée est un délit.
5.4.7 Valeurs dérivées dans une jointure
La jointure permet également d’effectuer des calculs sur des quantités extraites de
plusieurs tables. Le raisonnement est simple : la jointure constitue des lignes fictives
dont la clause select extrait des valeurs comme elle le ferait d’une ligne réelle
issue d’une table. La requête suivante associe à chaque ligne de DETAIL le montant
à payer.
select NCOM, D.NPRO, QCOM*PRIX
from
DETAIL D, PRODUIT P
where D.NPRO = P.NPRO
Quant à la requête suivante, elle établit le montant de la commande 30184.
select 'Montant commande 30184 = ', sum(QCOM*PRIX)
from
DETAIL D, PRODUIT P
where D.NCOM = '30184'
and
D.NPRO = P.NPRO
5.4.8 Les jointures généralisées
Les cas de jointure étudiés jusqu’ici étaient basés, sauf exception, sur l’égalité des
valeurs d’une clé étrangère avec celles d’un identifiant. En fait, la forme même de la
condition de jointure suggère que toute comparaison peut servir à indiquer comment
associer les lignes des tables concernées.
Exemple 1
Considérons par exemple le schéma de la figure 5.7, qui comporte une table VENTE
dont chaque ligne indique que dans un magasin de la chaîne c, le produit
p est vendu au prix x, ainsi qu’une table LOCALISATION dont chaque ligne
spécifie qu’un magasin de la chaîne c est implanté dans la ville v. Il est clair que la
colonne CHAINE de VENTE n’est pas une clé étrangère, pas plus qu’elle ne constitue un identifiant de LOCALISATION. Tout au plus peut-on espérer que les deux
colonnes aient des valeurs en commun. Nous ne sommes donc plus dans le schéma
classique représentant des associations explicites.
Figure 5.7 - Deux tables logiquement corrélées via les colonnes CHAINE, mais sans
clés étrangères
L’expression :
select distinct PRODUIT,VILLE,PRIX
from
VENTE V, LOCALISATION L
where V.CHAINE = L.CHAINE
indique, pour chaque ligne
103
© Dunod – La photocopie non autorisée est un délit.
5.4.7 Valeurs dérivées dans une jointure
La jointure permet également d’effectuer des calculs sur des quantités extraites de
plusieurs tables. Le raisonnement est simple : la jointure constitue des lignes fictives
dont la clause select extrait des valeurs comme elle le ferait d’une ligne réelle
issue d’une table. La requête suivante associe à chaque ligne de DETAIL le montant
à payer.
select NCOM, D.NPRO, QCOM*PRIX
from
DETAIL D, PRODUIT P
where D.NPRO = P.NPRO
Quant à la requête suivante, elle établit le montant de la commande 30184.
select 'Montant commande 30184 = ', sum(QCOM*PRIX)
from
DETAIL D, PRODUIT P
where D.NCOM = '30184'
and
D.NPRO = P.NPRO
5.4.8 Les jointures généralisées
Les cas de jointure étudiés jusqu’ici étaient basés, sauf exception, sur l’égalité des
valeurs d’une clé étrangère avec celles d’un identifiant. En fait, la forme même de la
condition de jointure suggère que toute comparaison peut servir à indiquer comment
associer les lignes des tables concernées.
Exemple 1
Considérons par exemple le schéma de la figure 5.7, qui comporte une table VENTE
dont chaque ligne
p est vendu au prix x, ainsi qu’une table LOCALISATION dont chaque ligne
spécifie qu’un magasin de la chaîne c est implanté dans la ville v. Il est clair que la
colonne CHAINE de VENTE n’est pas une clé étrangère, pas plus qu’elle ne constitue un identifiant de LOCALISATION. Tout au plus peut-on espérer que les deux
colonnes aient des valeurs en commun. Nous ne sommes donc plus dans le schéma
classique représentant des associations explicites.
Figure 5.7 - Deux tables logiquement corrélées via les colonnes CHAINE, mais sans
clés étrangères
L’expression :
select distinct PRODUIT,VILLE,PRIX
from
VENTE V, LOCALISATION L
where V.CHAINE = L.CHAINE
indique, pour chaque ligne
du résultat, que le produit p est disponible dans
la ville v au prix x, quelles que soient les chaînes qui y proposent p.
