Les bases de données relationnelles

Pr. EL HADIQ Zouhair

Modèle relationnel, modèle E/A, clés et langage SQL (SQLite)

CPGE MP / PSI · Informatique · 2ᵉ période

1 / 17

ObjectifsPLAN

Outil. SQLite, un SGBD léger qui range toute la base dans un seul fichier.
2 / 17

Vocabulaire1

TermeSynonymeSens
Tablerelationtableau décrivant une catégorie d'objets
Attributcolonneune propriété (nom, age…)
Enregistrementligne, tupleun objet de la table
Domainetypevaleurs possibles (INTEGER, TEXT…)
Schémanom + attributs et domaines
Schéma : Etudiant(id, nom, prenom, age, id_dep). La valeur NULL = information absente, égale à rien.
3 / 17

Modèle entité-association2

  • Entité : type d'objet (Étudiant, Module).
  • Attribut : propriété d'une entité.
  • Identifiant : attribut(s) qui distinguent chaque objet.
  • Association : lien entre entités.
  • Cardinalités : 1-1, 1-*, *-*.
Étudiant Module suit **
4 / 17

Clés primaire & étrangère3

Clé primaireClé étrangère
identifie une ligne de SA tablepointe vers une AUTRE table
unique, jamais NULLpeut se répéter, peut être NULL
une seule par tableplusieurs possibles
CREATE TABLE Etudiant ( id INTEGER PRIMARY KEY, nom TEXT, id_dep INTEGER, FOREIGN KEY (id_dep) REFERENCES Departement(id) );
5 / 17

E/A → relationnel4

CREATE TABLE Inscription ( id_etudiant INTEGER, code_module TEXT, note REAL, PRIMARY KEY (id_etudiant, code_module), FOREIGN KEY (id_etudiant) REFERENCES Etudiant(id), FOREIGN KEY (code_module) REFERENCES Module(code) );
6 / 17

Manipulation : INSERT / UPDATE / DELETE5

INSERT INTO Etudiant (id, nom, age, id_dep) VALUES (1, 'Alami', 19, 1); UPDATE Etudiant SET age = 22 WHERE id = 3; DELETE FROM Etudiant WHERE age < 18;
Danger. UPDATE / DELETE sans WHERE modifient TOUTES les lignes.
7 / 17

SELECT : projection & sélection6

SELECT nom, prenom -- projection π (colonnes) FROM Etudiant WHERE age >= 20; -- sélection σ (lignes)
8 / 17

Opérateurs de condition6

OpérateurExemple
= != < > <= >=age >= 20
AND OR NOTage > 18 AND id_dep = 1
INid_dep IN (1, 3)
BETWEEN … AND …age BETWEEN 19 AND 21
LIKEnom LIKE 'A%'
LIKE : % = toute suite de caractères, _ = un seul caractère.
9 / 17

Opérateurs ensemblistes7

SQLEnsembleRésultat
UNIONA ∪ Bl'un ou l'autre (sans doublon)
INTERSECTA ∩ Bprésent dans les deux
EXCEPTA − Bdans A, pas dans B
Les deux SELECT doivent avoir le même nombre de colonnes, de types compatibles.
10 / 17

Produit cartésien → jointure7-8

-- produit cartésien : m × n lignes, souvent sans sens SELECT * FROM Etudiant, Departement; -- jointure interne : produit cartésien FILTRÉ SELECT Etudiant.nom, Departement.nom FROM Etudiant JOIN Departement ON Etudiant.id_dep = Departement.id;
Jointure = relier deux tables via clé étrangère = clé primaire.
11 / 17

Jointure sur 3 tables + AS8-9

SELECT E.nom AS etudiant, M.intitule, I.note FROM Inscription AS I JOIN Etudiant AS E ON I.id_etudiant = E.id JOIN Module AS M ON I.code_module = M.code;
12 / 17

Agrégats & GROUP BY10

COUNT, SUM, AVG, MIN, MAX calculent une valeur sur un ensemble de lignes.

-- sur toute la table (1 seul groupe) SELECT COUNT(*), AVG(age) FROM Etudiant; -- un agrégat par groupe SELECT code_module, AVG(note) AS moyenne FROM Inscription GROUP BY code_module;
13 / 17

HAVING : filtrer les groupes11

SELECT code_module, AVG(note) AS moyenne FROM Inscription GROUP BY code_module HAVING AVG(note) > 12;
WHEREHAVING
avant regroupementaprès regroupement
filtre des lignesfiltre des groupes
pas d'agrégatagrégat autorisé
14 / 17

ORDER BY, LIMIT, OFFSET12

SELECT nom, age FROM Etudiant ORDER BY age DESC, nom ASC LIMIT 5 OFFSET 2;
15 / 17

Requêtes imbriquées13

-- comparaison à une valeur calculée SELECT nom FROM Etudiant WHERE age > (SELECT AVG(age) FROM Etudiant); -- appartenance à un ensemble SELECT nom FROM Etudiant WHERE id IN (SELECT id_etudiant FROM Inscription);
Opérateurs : =,<,>…, IN / NOT IN, EXISTS / NOT EXISTS. Une sous-requête vit dans WHERE, FROM ou HAVING.
16 / 17

RécapitulatifBILAN

17 / 17