Algèbre relationnelle ! ! ! ! ! Algèbre relationnelle Une autre vision de l'interrogation des bases de données ! Plus théorique (aide à comprendre) ! Pas seulement théorique : utilisable directement en SQL Support de l'algèbre : tables comme ensemble de n-uplets. Opération : table1, table2, ... -> table-résultat une opération combine des tables pour en produire une nouvelle (Mais peu utilisée) SQL est une implémentation de l' « algèbre relationnelle » 1 2 Opérations de l'algèbre relationnelle ! union, ! intersection, ! différence, ! projections, ! restriction, ! produits, ! jointures, ! ... union, intersection, différence ! ! ! S'appliquent à des tables qui ont des schémas identiques union, intersection et différence d'ensembles de n-uplets. a | b a | b a | b --+-- ! --+-- = --+-1 | 2 3 | 4 1 | 2 3 | 4 5 | 6 3 | 4 5 | 6 3 4 Sélection Projection ! Choix des n-uplets qui satisfont une condition. ! Choix de certaines colonnes ! R1 = !C(R2) où C est une condition booléenne ! R1 = "L(R2) où L est une liste d'attributs ! VenteAPerte = !prix < coût(Vente) ! NomDesBars = "nom(bar) – 5 (une « table » à une seule colonne) 6 Produits et jointures ! ! jointure naturelle 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) ! 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) 7 8 Exemple ! ! R1 a | b ---+--1 | 2 2 | 3 R = R1 equi-jointures R2 b | c ---+-3 | 7 2 | 9 ! ! formellement, une jointure theta où les conditions sont des égalités. Très semblables à des jointures naturelles R2 = a | b | c --+---+--1 | 2 | 9 2 | 3 | 7 9 10 Jointures naturelles et équi-jointures ! Exemple 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. ! 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 11 12