7
Produits et jointures
!On a d'abord le produit Cartésien
–R = R1 x R2
–Toutes les combinaisons de nuplets de R1 et R2
!Puis la jointure theta, qui combine un produit et
une sélection : R = R1 !c R2
–R = !C(R1 x R2)
–(C'est le sens général des requêtes SELECT)
8
jointure naturelle
!R = R1 R2
!Les n-uplets ne sont retenus que si les attributs de
même nom ont les mêmes valeurs
!(C'est un cas particulier de jointure thèta)
9
Exemple
!R1 a | b R2 b | c
---+--- ---+--
1 | 2 3 | 7
2 | 3 2 | 9
!R = R1 R2 = a | b | c
--+---+---
1 | 2 | 9
2 | 3 | 7
10
equi-jointures
!formellement, une jointure theta où les conditions
sont des égalités.
!Très semblables à des jointures naturelles
11
Jointures naturelles et équi-jointures
!Implémentation très efficace si il y a des
« index » sur les colonnes de la jointure
–Les index sont des structures de données auxiliaires
qui facilitent l'accès au n-uplets en fonction de la
valeur de l'attribut pour lequel on a un index
–postgreSQL construit automatiquement un index sur
les clés primaires.
12
Exemple
!Equi-jointure exprimée comme jointure theta :
SELECT r1.a, r2.b FROM r1, r2
WHERE r1.c = r2.d
!Introduction de l'équi-jointure explicite :
SELECT r1.a, r2.b
FROM r1 JOIN r2 ON r1.c = r2.d