5.4 Extraction de données de plusieurs tables (jointure)
99
© Dunod – La photocopie non autorisée est un délit.
(c’est-à-dire des personnes qui ont pour responsable une personne dont 'p4' est le
responsable) s’obtiendrait par une double jointure (on ignore les personnes qui n’ont
pas de responsable) :
select R.NPERS, R.NOM, SS.NPERS, SS.NOM
from
PERSONNE R, PERSONNE S, PERSONNE SS
where R.NPERS = 'p4'
and
R.NPERS = S.RESPONSABLE
and
S.NPERS = SS.RESPONSABLE
Ces requêtes montrent que SQL ne permet pas d’obtenir facilement tous les responsables, directs et indirects, d’une personne déterminée, ni les personnes qui
dépendent, directement ou indirectement, d’une personne déterminée, du moins
sans recourir à la programmation procédurale. On dira que SQL, dans ses versions
actuelles les plus répandues, ne permet pas d’exprimer des requêtes récursives 26 .
Un autre exemple classique de structure cyclique décrit une nomenclature de
produits. On y indique la composition de chaque produit en sous-produits, ces
derniers pouvant également être décomposés en autres sous-produits, et ainsi de
suite. Le schéma de la figure 5.5 illustre cette structure. On notera que les relations
entre produits ne peuvent plus s’exprimer par une simple clé étrangère ajoutée à la
table PRODUIT comme nous l’avions fait pour la table PERSONNE. En effet, alors
qu’une personne n’a qu’un seul responsable, un produit peut être constitué de
plusieurs composants et entrer dans la composition de plusieurs autres produits.
C’est la table COMPOSITION qui représente les relations de composition entre
produits. Une ligne indique que le produit b est un composant du produit
h, et qu’il faut q unités de b pour fabriquer 1 unité de h. On peut ainsi représenter le
fait qu’une unité du produit p2 contient 8 unités du produit p7 et 2 unités du produit
p8 (la figure 5.6 représente un exemple de nomenclature).
Figure 5.5 - Une structure indirectement cyclique : nomenclature d’une gamme de
produits
L’identifiant indique qu’un produit n’est renseigné qu’une seule fois comme composant direct d’un même produit. Les matières premières ont un prix et un poids
unitaires qui doivent être fixés; le prix et le poids des autres produits peuvent être
calculés à partir des caractéristiques de leurs composants.
26. ORACLE propose une version spécifique de la requête SFW permettant de calculer une jointure cyclique. Nous l’examinerons dans la section 6.3.3. Le lecteur intéressé par les requêtes
(récursives) appliquées aux structures de graphes consultera utilement les chapitres 26 et 27 de
[Celko,2000].
99
© Dunod – La photocopie non autorisée est un délit.
(c’est-à-dire des personnes qui ont pour responsable une personne dont 'p4' est le
responsable) s’obtiendrait par une double jointure (on ignore les personnes qui n’ont
pas de responsable) :
select R.NPERS, R.NOM, SS.NPERS, SS.NOM
from
PERSONNE R, PERSONNE S, PERSONNE SS
where R.NPERS = 'p4'
and
R.NPERS = S.RESPONSABLE
and
S.NPERS = SS.RESPONSABLE
Ces requêtes montrent que SQL ne permet pas d’obtenir facilement tous les responsables, directs et indirects, d’une personne déterminée, ni les personnes qui
dépendent, directement ou indirectement, d’une personne déterminée, du moins
sans recourir à la programmation procédurale. On dira que SQL, dans ses versions
actuelles les plus répandues, ne permet pas d’exprimer des requêtes récursives 26 .
Un autre exemple classique de structure cyclique décrit une nomenclature de
produits. On y indique la composition de chaque produit en sous-produits, ces
derniers pouvant également être décomposés en autres sous-produits, et ainsi de
suite. Le schéma de la figure 5.5 illustre cette structure. On notera que les relations
entre produits ne peuvent plus s’exprimer par une simple clé étrangère ajoutée à la
table PRODUIT comme nous l’avions fait pour la table PERSONNE. En effet, alors
qu’une personne n’a qu’un seul responsable, un produit peut être constitué de
plusieurs composants et entrer dans la composition de plusieurs autres produits.
C’est la table COMPOSITION qui représente les relations de composition entre
produits. Une ligne
h, et qu’il faut q unités de b pour fabriquer 1 unité de h. On peut ainsi représenter le
fait qu’une unité du produit p2 contient 8 unités du produit p7 et 2 unités du produit
p8 (la figure 5.6 représente un exemple de nomenclature).
Figure 5.5 - Une structure indirectement cyclique : nomenclature d’une gamme de
produits
L’identifiant indique qu’un produit n’est renseigné qu’une seule fois comme composant direct d’un même produit. Les matières premières ont un prix et un poids
unitaires qui doivent être fixés; le prix et le poids des autres produits peuvent être
calculés à partir des caractéristiques de leurs composants.
26. ORACLE propose une version spécifique de la requête SFW permettant de calculer une jointure cyclique. Nous l’examinerons dans la section 6.3.3. Le lecteur intéressé par les requêtes
(récursives) appliquées aux structures de graphes consultera utilement les chapitres 26 et 27 de
[Celko,2000].
