Bonsoir,

Envoyé par
SQLpro
les attributs doivent porter le même nom. C'est une stupidité ! Vous pouvez avoir une jointure naturelle sur des attributs ayant un nom non identique.
Excuse-moi Frédéric, mais ça n’est pas une stupidité, puisqu’il s’agit de la théorie relationnelle : si les attributs sur lesquels portent la jointure n’ont pas le même nom (mais sont du même type !), on les renomme à l’aide de l’opérateur RENAME avant d’effectuer la jointure. Maintenant, que SQL permette de noter l’opération différemment, pourquoi pas (notamment à cause du typage), mais la norme SQL n’est pas une théorie.
Je rappelle ici la définition de la jointure dans le cadre de la théorie relationnelle (je fais référence à The Relational Database Dictionary).
Jointure naturelle
1. (Cas dyadique) Soit les relations r1 er r2 où les attributs qui ont le même nom sont du même type. La jointure naturelle de r1 et r2 :
r1 JOIN r2
est une relation dont l’en-tête est l’union (au sens de la théorie des ensembles) des en-têtes de r1 et r2, et dont le corps est l’ensemble des tuples t tels que t est l’union (au sens de la théorie des ensembles) d’un tuple de r1 et d’un tuple de r2.
2. (Cas N-adique) Soit les relations r1, r2, ..., rn (n ≥ 0) où les attributs ayant le même nom sont du même type. La jointure naturelle {r1, r2, ..., rn} est ainsi définie : Si n = 0 le résultat est TABLE_DEE ; si n = 1, le résultat est r1 ; sinon on choisit deux relations distinctes parmi l’ensemble r1, r2, ..., rn et on les remplace par leur jointure naturelle (dyadique) puis on répète le procédé jusqu’à ce que l’ensemble soit constitué d’une seule relation r qui représente le résultat final.
Considérons par exemple les relvars (variables relationnelles) décrivant les fournisseurs (S) et les livraisons de pièces (SP) :
S {S#, SNAME, STATUS, CITY}
SP {S#, P#, QTY}
Où S# représente le numéro d'un fournisseur, SNAME son nom, STATUS son score, CITY sa ville de résidence, P# un numéro de pièce et QTY le nombre de pièces livrées par le fournisseur.
L’expression S JOIN SP représente la jointure naturelle des relations qui sont les valeurs actuelles des relvars S et SP. Cette jointure est une relation de type
RELATION {S#, SNAME, STATUS, CITY, P#, QTY}
Qui plus est, si les valeurs des relvars S et SP sont respectivement s et sp, le corps de cette relation est constitué de tous les tuples de la forme <s#,sn,st,sc,p#,q> tels que le tuple <s#,sn,st,sc> est présent dans s et le tuple <s#,p#,q> présent dans sp.
Thêta-jointure : c'est une opération relationnelle équivalant à une expression de la forme :
(r1 TIMES r2) WHERE A1 thêta A2
Où TIMES représente le produit cartésien, WHERE A1 thêta A2 représente une condition prenant la valeur vrai ou faux, A1 et A2 sont respectivement des attributs (du même type T) de r1 et r2 et thêta est un opérateur de comparaison (« = », « > », « ≥ », etc.) utilisable pour les valeurs du type T.
Équi-jointure : une thêta-jointure où thêta est « = ».
Semi-jointure : Soit les relations r1 et r2. La semi-jointure de r1 et r2 (dans cet ordre) est notée :
r1 MATCHING r2
Et représente un raccourci pour (r1 JOIN r2){X}, où {X} représente l’en-tête de r1 (c’est donc la projection sur X de r1 JOIN r2).
Partager