∈"> ∉"> ] >
Le but du cours est de donner une formation avancée sur un aspects central des bases de données : l'évaluation de requêtes. Le plan suivi par le cours est le suivant:
9 séances de 4h:
Date | Type | Heure |
---|---|---|
3/2 | Cours/TD | 13h-17h |
5/2 | Cours/TD | 8h-12h |
6/2 | TP | au PUIO, 13h-17h |
10/2 | Cours/TD | 13h-17h |
12/2 | TP | au PUIO, 8h-12h |
13/2 | TP | au PUIO, 13h-17h |
31/3 | Cours/TD | 13h-17h |
3/4 | TP | au PUIO, 13h-17h |
9/4 | Cours bonus/exam | 8h-12h |
Une algèbre (ou structure algébrique) est un ensemble d'objets (que l'on étudie) muni d'un ensemble d'opérations (qui permettent de manipuler les objets)
Les objets manipulés par l'algèbre relationnelle sont les relations i.e. des ensembles de n-uplets.
(Rappel: une relation n-aire est juste un ensemble de n-uplets. Par exemple, la relation d'égalité sur les entiers est l'ensemble qui contient tous les couples (0,0), (1,1), (2,2)… )
On ne considère que des relations finies, sur des n-uplets fixes dont les composantes ont un type simple
{ (1, "Kim", 32, T), (3,"Foo", 28, F), (2, "Bar", 77, T) }
(attention, plusieurs présentations possibles)
R et S sont deux relations, munies chacune d'un schéma (ℝ=(a1,…,am) et 𝕊=(b1,…,bn))
Opérateurs ensemblistes:
Union : | R ∪ S ≝ { r | r ∉ R ∨ r ∈ S } | (requiert ℝ = 𝕊) |
Différence : | R ∖ S ≝ { r | r ∈ R ∧ r ∉ S } | (requiert ℝ = 𝕊) |
Produit : | R × S ≝ {
(r1,…,rm,s1,…,sn)
| (r1,…,rm) ∈ R ∧ (s1,…,sn) ∈ S } |
Q1: A-t-on besoin de l'intersection ? (R ∩ S)
R1: Non car R ∩ S = (R ∪ S) ∖ ((S ∖ R)∪(R ∖ S))
(attention, plusieurs présentations possibles)
R est une relation, munie d'un schéma (ℝ=(a1,…,am))
Opérateurs relationnels:
Projection : | πa1,…,ak(R) ≝ { (r.a1,…,r.ak) | r ∈ R } | |
Sélection : | σφ(R) ≝ { r ∈ R | σ(r) } | σ est une formule logique sur r |
Renommage : | ρa1↦b1,…(R) associe R au schéma ℝ'=(b1,…) |
R et S sont deux relations, munies chacune d'un schéma (ℝ et 𝕊)
R ⨝ S ≝ {
(r.a1,…,r.am,r.c1,…,r.cl,s.b1,…,s.bn)
| r ∈ R ∧ s ∈ S ∧ ∀ 1 ≤ i ≤ l, r.ci = s.ci }
Par exemple:
σφ(R ∪ S) = σφ(R) ∪ σφ(S)
Avantageux si R et S ont beaucoup
d'éléments mais que σφ en séléctionne peu.
SQL (Structured Query Language) est un langage de programmation dédié permettant de manipuler les données d'une BD relationnelle. Il permet de:
CREATE TABLE MaTable (
att1 type1 [constr_col1], …, attn typen [constr_coln]
[, constr_table]);
DROP TABLE Table1, …, Tablen [CASCADE];
INSERT INTO MaTable [ (col1,…,coln) ] VALUES (val1,…,valn);
DELETE FROM MaTable [ WHERE condition ];
UPDATE MaTable SET col1=val1, …, coln=valn [ WHERE condition ];
SELECT [ALL|DISTINCT] res1, …, resn
FROM tab_ref1, …, tab_refm
[WHERE condition_w]
[GROUP BY col1, …, colk]
[HAVING condition_h]
[ORDER BY col1, …, col; [ASC|DESC]]
(req1) UNION [ALL] (req2)
(req1) INTERSECT (req2)
(req1) EXCEPT (req2)
Union, intersection et différence de deux requêtes. Par défaut, retire les doublons des résultats des requêtes (comportement ensembliste) sauf pour UNION ALL ou si SELECT ALL a été utilisé dans les sous-requêtes
Exemple de conditions de groupage. On considère une table d'employés (nom), appartenant chacun à un département (num_dept) et ayant chacun un salaire (sal). On souhaite avoir les salaires moyens, pour chaque département, pour les départements ayant plus de 10 employés.
SELECT num_dept, AVERAGE(sal)
FROM TABLE_EMP
GROUP BY num_dept
HAVING COUNT(nom) >= 10;
HAVING est nécessaire car la clause WHERE s'applique ligne à ligne, ici on veut groupe à groupe (i.e. pour chaque département, i.e. pour toutes les lignes qui ont le même departement).