Aller au contenu

UGA - MIASHS - S7 - BDD - Pierre Blarre

Algèbre relationnelle

Icône Présentation
1 / 1

Algèbre relationnelle

Dans le second chapitre du cours, nous avons abordé les concepts suivants :

L’algèbre relationnelle est un langage formel permettant de manipuler des relations dans une base de données relationnelle.

Elle est basée sur des opérations mathématiques et permet de réaliser des opérations telles que la sélection, la projection, la jointure, l’union, la différence, etc.

Il existe 2 notations principales pour l’algèbre relationnelle : la notation mathématique et la notation textuelle.

Opérateurs

de l’algèbre relationnelle

Les opérations de base de l’algèbre relationnelle sont les suivantes :

  • Projection (π ou R[*] ou R[A] ) : sélectionne les colonnes spécifiées
  • Sélection (σ ou R:C ) : sélectionne les lignes qui satisfont une condition
  • Produit cartésien (× ou R1 × R2) : combine toutes les lignes de deux relations
  • Jointure ( ou R1 ⋈ R2 ou R1 : (R1.A = R2.A) x R2) : combine les lignes de deux relations en fonction d’une condition de jointure
  • Union ( ou R1 ∪ R2) : retourne toutes les lignes de deux relations
  • Intersection ( ou R1 ∩ R2) : retourne les lignes communes à deux relations
  • Différence (- ou R1 - R2) : retourne les lignes qui sont dans une relation mais pas dans l’autre
  • Division (÷ ou R1 ÷ R2 ou R1 / R2) : retourne les valeurs de l’attribut de R1 qui sont associées à toutes les valeurs de l’attribut de R2
  • Renommage (ρ ou R[A1|A2]) : renomme les attributs d’une relation

Opérateurs

algébriques

  • Comparaison (≠, <, >, ≤, ≥, =) : compare les valeurs de deux relations dans une condition
  • Négation (¬) : retourne les lignes qui ne satisfont pas une condition
  • Conjonction ( ou AND) : retourne les lignes qui satisfont deux conditions
  • Disjonction ( ou OR) : retourne les lignes qui satisfont au moins une des conditions

supplémentaires

Ces opérateurs ne font pas réellement partie de l’algèbre relationnelle, mais peuvent être utilisés dans les requêtes SQL :

  • Agrégation (Γ ou COUNT) : regroupe les lignes d’une relation et applique des fonctions d’agrégation
  • Existence (EXISTS) : vérifie si une relation contient des lignes
  • Quantification (FORALL) : vérifie si toutes les lignes d’une relation satisfont une condition
  • Sous-requête (IN) : utilise le résultat d’une requête comme condition

Exemple

Soit les relations suivantes :

Employes (idEmploye, nom, prenom, dateEmbauche, salaire)
Departements (idDepartement, nomDepartement)
Affectations (idEmploye, idDepartement, dateDebut, dateFin)

Requêtes

1. Sélectionner les employés qui gagnent plus de 3000€
σ salaire > 3000 (Employes)
ou
R = Employes : (salaire > 3000)

Requêtes

2. Sélectionner les employés du département ‘Informatique’
σ nomDepartement = 'Informatique' (Employes ⋈ Affectations ⋈ Departements)
ou
R1 = Departements : (Departements.idDepartement = Affectations.idDepartement) x Affectations
R2 = Employes : (Employes.idEmploye = Affectations.idEmploye) x R1
R3 = R2 : (nomDepartement = 'Informatique')

Requêtes

3. Sélectionner les employés qui ne sont pas affectés à un département
π idEmploye (Employes) - π idEmploye (Affectations)
ou
R = Employes[idEmploye] - Affectations[idEmploye]

Requêtes

4. Sélectionner les employés qui sont affectés à tous les départements
π idEmploye (Employes) ÷ π idEmploye (Affectations)
ou
R = Employes[idEmploye] ÷ Affectations[idEmploye]

Equivalences AR / SQL

Algèbre RelationnelleSQLDescriptionRemarque
R[A]
SELECT A
FROM R
Projection
R[*]
SELECT *
FROM R
Projection sur toutes les colonnes
R : C
SELECT *
FROM R
WHERE C
Sélection
R x S
SELECT *
FROM R, S
Produit cartésien
R (P) * S
SELECT *
FROM R, S
WHERE P
Jointure
R ⨝ S
SELECT *
FROM R, S
WHERE R.A = S.A
Jointure naturelle
R ∪ S
SELECT * FROM R
UNION
SELECT * FROM S
Union
R ∩ S
SELECT * FROM R
INTERSECT
SELECT * FROM S
Intersection
R - S
SELECT * FROM R
MINUS
SELECT * FROM S
Différence Avec SQLite, MINUS est remplacé par le terme EXCEPT
R / S
SELECT A FROM R
MINUS
(
SELECT A
FROM R
WHERE A, B IN (
SELECT R.A, S.B FROM R, S
MINUS
SELECT A, B FROM R
)
)
Division Avec SQLite, MINUS est remplacé par le terme EXCEPT
R / S
SELECT A FROM R, S
WHERE R.B = S.B
GROUP BY A
HAVING COUNT(DISTINCT(R.B)) = (SELECT COUNT(DISTINCT B) FROM S)
Division Une version alternative de la division : On compte le nombre de valeurs distinctes de B dans R et on vérifie qu'il est égal au nombre de valeurs distinctes de B dans S.