Bases de données relationnelles et SQL

Modèle relationnel, clés, contraintes d'intégrité et requêtes SQL (SELECT, JOIN, GROUP BY, INSERT/UPDATE/DELETE) avec exemples exécutables.

Se connecter pour contribuerPublié le · Dernière mise à jour le

1. Pourquoi une base de données relationnelle ?

Stocker des données dans des fichiers plats (CSV) pose quatre problèmes : redondance, incohérence, absence de contrôle des accès concurrents et difficulté d'interrogation. Un SGBD relationnel (PostgreSQL, MySQL, SQLite) résout ces problèmes en garantissant les propriétés ACID : Atomicité, Cohérence, Isolation, Durabilité.

2. Le modèle relationnel

Une relation (table) est un ensemble de n-uplets (lignes) définis sur des attributs (colonnes) typés. Vocabulaire exigible :

  • Schéma relationnel : Eleve(id INTEGER, nom TEXT, classe TEXT).
  • Clé primaire : attribut(s) identifiant de façon unique chaque n-uplet ; ni nul, ni dupliqué.
  • Clé étrangère : attribut référençant la clé primaire d'une autre relation.
  • Contraintes d'intégrité : de domaine (type et valeurs admises), d'entité (unicité de la clé primaire), référentielle (toute clé étrangère pointe vers une ligne existante).

Schéma d'étude

CREATE TABLE eleve (
  id      INTEGER PRIMARY KEY,
  nom     TEXT NOT NULL,
  classe  TEXT CHECK (classe IN ('TG1','TG2','TG3'))
);

CREATE TABLE devoir (
  id        INTEGER PRIMARY KEY,
  matiere   TEXT NOT NULL,
  coef      REAL DEFAULT 1
);

CREATE TABLE note (
  eleve_id  INTEGER REFERENCES eleve(id),
  devoir_id INTEGER REFERENCES devoir(id),
  valeur    REAL CHECK (valeur BETWEEN 0 AND 20),
  PRIMARY KEY (eleve_id, devoir_id)
);

La table note illustre une association plusieurs-à-plusieurs : sa clé primaire est composite.

3. Interroger : le SELECT

SELECT nom, classe FROM eleve WHERE classe = 'TG2' ORDER BY nom;

Ordre d'écriture : SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ... LIMIT. Ordre d'évaluation logique : FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY. C'est pourquoi on ne peut pas utiliser un alias du SELECT dans le WHERE.

Jointures

SELECT e.nom, d.matiere, n.valeur
FROM note n
JOIN eleve  e ON e.id = n.eleve_id
JOIN devoir d ON d.id = n.devoir_id
WHERE d.matiere = 'NSI';
  • JOIN (interne) : ne garde que les lignes appariées.
  • LEFT JOIN : garde toutes les lignes de gauche, complète par NULL — utile pour repérer les élèves sans note.

Agrégats

SELECT e.classe, ROUND(AVG(n.valeur), 2) AS moyenne, COUNT(*) AS nb
FROM eleve e JOIN note n ON n.eleve_id = e.id
GROUP BY e.classe
HAVING COUNT(*) >= 5;

WHERE filtre les lignes avant regroupement, HAVING filtre les groupes après. Fonctions d'agrégation : COUNT, SUM, AVG, MIN, MAX.

4. Modifier les données

INSERT INTO eleve (id, nom, classe) VALUES (12, 'Nour', 'TG1');
UPDATE eleve SET classe = 'TG3' WHERE id = 12;
DELETE FROM note WHERE eleve_id = 12;

⚠️ Un UPDATE ou un DELETE sans WHERE s'applique à toute la table : erreur classique et irréversible hors transaction.

5. Transactions

BEGIN;
UPDATE compte SET solde = solde - 100 WHERE id = 1;
UPDATE compte SET solde = solde + 100 WHERE id = 2;
COMMIT;   -- ou ROLLBACK en cas d'erreur

L'atomicité garantit que le virement est entièrement effectué ou pas du tout.

6. Erreurs fréquentes au bac

  • Confondre clé primaire et identifiant « métier » (un nom n'est pas unique).
  • Oublier que NULL n'est égal à rien : on écrit WHERE valeur IS NULL, jamais = NULL.
  • Placer une condition d'agrégat dans le WHERE.
  • Supprimer une ligne référencée : le SGBD refuse (violation d'intégrité référentielle) sauf ON DELETE CASCADE.

À retenir

Modèle relationnel = tables + clés + contraintes. SQL est déclaratif : on décrit ce que l'on veut, le SGBD choisit comment l'obtenir. Maîtriser JOIN, GROUP BY/HAVING et les contraintes d'intégrité suffit à traiter l'essentiel des exercices d'épreuve.

Sources et références

Ce cours est rédigé par l'équipe RévisionBac à partir du programme officiel et des sources institutionnelles ci-dessous. Elles permettent de vérifier les définitions, les chiffres et les normes citées.

  1. 1.Programmes et ressources du lycée général et technologiqueÉduscol — Ministère de l'Éducation nationale
  2. 2.Bulletin officiel de l'Éducation nationale (programmes du baccalauréat)education.gouv.fr
  3. 3.Ressources et programme de NSIÉduscol
  4. 4.Documentation du langage PythonPython Software Foundation
  5. 5.Protection des données et RGPDCNIL

Contenu vérifié et mis à jour le 08/08/2026. Les liens renvoient vers les sites officiels des éditeurs cités.

Historique éditorial

Ce chapitre est rédigé et relu par l'équipe RévisionBac, puis enrichi par les contributions validées.

  1. Dernière mise à jour du cours (relecture et enrichissement)
  2. Première publication de la fiche de cours