EuraStudy
Fiches/NSI — Numérique et sciences informatiques/Bases de données relationnelles et SQL
Fiches · NSI — Numérique et sciences informatiquesFR · Bac

Bases de données relationnelles et SQL

Ce thème de spécialité présente le modèle relationnel — une base de données vue comme un ensemble de relations (tables) reliées par des clés — et son outil d'interrogation et de mise à jour : le langage SQL. On y apprend à lire un schéma relationnel, à garantir la cohérence des données par les contraintes d'intégrité, à comprendre les services d'un SGBD, puis à écrire des requêtes SELECT (sélection, projection, jointure, tri, agrégation) et des requêtes de mise à jour (INSERT, UPDATE, DELETE). C'est un thème entièrement au programme de l'épreuve écrite de terminale.

5 sections·~21 min de lecture·4 compétences·Niveau Base 1 · Standard 3 · Approfondissement 1·Vérifié · 06/2026

T·0888 / 10
Profil d’examen
Identifier les concepts du modèle relationnel : relation, attribut, domaine, n-uplet et schéma relationnel.Identifier une clé primaire et une clé étrangère dans un schéma, et repérer une violation des contraintes d'intégrité (de relation et référentielle).Identifier les services rendus par un SGBD relationnel : persistance des données, gestion des accès concurrents, efficacité de traitement des requêtes, sécurisation des accès.Écrire des requêtes SQL d'interrogation (sélection, projection, jointure, tri, agrégation) et de mise à jour (insertion, modification, suppression) portant sur une ou plusieurs tables.
Opérateurs :identifierliredécrirejustifierécriretraduireinterprétervérifier

niveau de base

Maîtriser d'abord le vocabulaire du modèle relationnel, savoir repérer clés primaires/étrangères sur un schéma, et écrire les requêtes SELECT simples (un seul SELECT … FROM … WHERE … ORDER BY) ainsi que les trois requêtes de mise à jour.

niveau approfondi

Savoir composer une jointure de plusieurs tables, regrouper et agréger avec GROUP BY/HAVING, raisonner sur la cohérence des contraintes d'intégrité lors des suppressions, et expliquer précisément les services d'un SGBD (transactions, accès concurrents).

Profondeur

Profondeur de lecture : Approfondi

Texte

Taille du texte : Standard

Sommaire · 5 sections▾
  1. Bases de données relationnelles et SQL
    • 01Le modèle relationnel : relations, attributs et schéma○
    • 02Clés primaires, clés étrangères et contraintes d'intégrité◐
    • 03Le système de gestion de bases de données (SGBD)◐
    • 04Interroger une base en SQL : SELECT, jointure, agrégation●
    • 05Mettre à jour une base en SQL : INSERT, UPDATE, DELETE◐
§ 01

Le modèle relationnel : relations, attributs et schéma#

●○○BaseLPeduscol-programme-nsi-terminale

Anatomie d'une relation : attributs, n-uplets et domaines

La relation « eleve » : attributs, n-uplets, domainesTableau de 4 colonnes et 3 lignes, Données: id · nom · prenom · classe; 1 · Martin · Léa · TG1; 2 · Nguyen · Hugo · TG2; 3 · Diallo · Sara · TG1, cellule mise en évidence : 1IDNOMPRENOMCLASSE1MartinLéaTG12NguyenHugoTG23DialloSaraTG1
Fig. 1La relation eleve : les attributs (id, nom, prenom, classe) forment les colonnes ; chaque n-uplet (enregistrement) est une ligne ; toutes les valeurs d'une colonne partagent le même domaine. L'attribut id, mis en évidence, joue le rôle de clé primaire.

Points clés

Une relation (couramment appelée table) est un ensemble de n-uplets (lignes, ou enregistrements). Chaque relation est décrite par un nom et une liste d'attributs (colonnes), par exemple eleve(id, nom, prenom, classe).
Le domaine d'un attribut est l'ensemble des valeurs qu'il peut prendre (entiers, chaînes de caractères, dates, booléens…). Toutes les valeurs d'une même colonne appartiennent au même domaine : une colonne age contient des entiers, jamais du texte.
Le schéma relationnel d'une relation est la donnée de son nom et de ses attributs (avec leurs domaines) ; le schéma d'une base est l'ensemble des schémas de ses relations, complété par les clés. Il décrit la structure (l'intension), indépendamment des données réelles (l'extension) qui peuvent changer.
Une relation est un ensemble : il n'y a pas de doublon de n-uplet et l'ordre des lignes n'a aucune signification. De même, l'ordre des colonnes n'est pas porteur de sens — on désigne un attribut par son nom, jamais par sa position.
Rappel de première : on manipulait déjà des données tabulées (fichiers CSV, p-uplets nommés). Le modèle relationnel formalise cette idée en y ajoutant les clés et les contraintes, et en confiant la gestion à un logiciel dédié, le SGBD.
relation : eleve(id‾, nom, prenom, classe)\text{relation : } \mathtt{eleve}(\underline{\mathtt{id}},\ \mathtt{nom},\ \mathtt{prenom},\ \mathtt{classe})relation : eleve(id​, nom, prenom, classe)

Notation d'un schéma de relation

On note le nom de la relation suivi de ses attributs entre parenthèses. L'attribut souligné (ici id) désigne la clé primaire. C'est l'intension : la structure, indépendante des lignes réellement stockées.

Exemple corrigé

Décrire une relation à partir de son extension

On donne la relation livre(isbn, titre, annee, id_auteur). On affiche trois n-uplets : (978-2070, 'Candide', 1759, 7), (978-2253, 'Germinal', 1885, 12), (978-2070, 'Zadig', 1747, 7). Nommez la relation, ses attributs, proposez un domaine pour chacun, et indiquez combien de n-uplets sont présents. Y a-t-il un problème ?

  1. 01Identifier relation et attributs

    La relation s'appelle livre. Ses attributs (colonnes) sont isbn, titre, annee et id_auteur. C'est l'intension (le schéma) ; les trois lignes affichées sont l'extension (les données).

  2. 02Proposer un domaine pour chaque attribut

    isbn : chaîne de caractères (le tiret et les chiffres en font un identifiant texte, pas un nombre). titre : chaîne de caractères. annee : entier. id_auteur : entier (il référencera plus tard un auteur).

    livre(isbn‾, titre, annee, id_auteur)\mathtt{livre}(\underline{\mathtt{isbn}},\ \mathtt{titre},\ \mathtt{annee},\ \mathtt{id\_auteur})livre(isbn​, titre, annee, id_auteur)
  3. 03Compter les n-uplets et repérer l'anomalie

    Trois lignes sont affichées, mais deux portent le même isbn 978-2070 pour deux titres différents (« Candide » et « Zadig »). Si isbn est censé identifier de façon unique un livre, ces deux n-uplets violent l'unicité attendue de cet identifiant : isbn ne peut pas servir de clé primaire telle quelle.

Résultat : Relation livre, quatre attributs (isbn : texte ; titre : texte ; annee : entier ; id_auteur : entier), trois n-uplets affichés. Anomalie : l'isbn 978-2070 apparaît deux fois pour deux livres distincts — il ne peut donc pas faire office de clé primaire, qui doit être unique.

Objectif Bac

  • Objectif Bac : savoir lire un schéma relationnel donné et nommer correctement chaque concept — distinguer relation, attribut, domaine, n-uplet — sans confondre la structure (schéma) et le contenu (les lignes).
  • Objectif Bac : à partir d'une description en français d'un problème (« on gère des livres et leurs auteurs »), proposer un schéma relationnel cohérent, c'est-à-dire choisir les relations, leurs attributs et le domaine de chacun.

Erreurs fréquentes

  • Confondre le schéma (la structure : noms d'attributs et domaines) avec l'extension (les n-uplets effectivement présents) : ajouter ou supprimer des lignes ne change pas le schéma.
  • Croire que l'ordre des lignes ou des colonnes a un sens, ou tolérer deux lignes parfaitement identiques : une relation est un ensemble de n-uplets, sans ordre ni doublon.

Révision active

Un club sportif veut gérer ses adhérents et les activités auxquelles ils sont inscrits. Proposez un schéma relationnel : nommez les relations, listez leurs attributs et indiquez pour chacun un domaine plausible. Repérez ensuite, dans votre schéma, ce qui relèvera plus tard d'une clé primaire.

Rappel actif

Rappelle-toi les points clés — puis révèle.

Sources : Programme de spécialité Numérique et sciences informatiques — classe terminale (BO spécial n° 8 du 25 juillet 2019) (Ministère de l'Éducation nationale — Éduscol)

§ 02

Clés primaires, clés étrangères et contraintes d'intégrité#

●●○StandardLPeduscol-programme-nsi-terminale

Lien clé primaire ↔ clé étrangère entre deux relations

Clé primaire (auteur.id) référencée par une clé étrangère (livre.id_auteur)figure à plusieurs panneaux, 2 panneaux, Données: auteur (id = clé primaire) — Tableau de 2 colonnes et 2 lignes, cellule mise en évidence : 1; livre (id_auteur = clé étrangère) — Tableau de 3 colonnes et 3 lignes, cellule mise en évidence : 1Clé primaire (auteur.id) référencée par une clé étrangère (livre.idauteur)IDNOM1Voltaire2Zolaauteur (id = clé primaire)IDTITREID_AUTEUR10Candide111Zadig112Germinal2livre (idauteur = clé étrangère)
Fig. 2La table livre porte une clé étrangère id_auteur qui référence la clé primaire id de la table auteur. Intégrité référentielle : chaque id_auteur de livre doit exister dans auteur.id (ici 1 = Voltaire, 2 = Zola).

Points clés

La clé primaire est un attribut (ou un petit groupe d'attributs) qui identifie de façon unique chaque n-uplet d'une relation. Elle doit être unique (jamais deux lignes avec la même valeur) et non NULL (toujours renseignée). On la souligne dans le schéma.
La clé étrangère est un attribut d'une relation qui référence la clé primaire d'une autre relation (ou de la même). Elle matérialise un lien entre tables : id_auteur dans livre référence id dans auteur.
Contrainte d'intégrité de relation (ou d'entité) : la clé primaire est unique et non NULL. Conséquence : on ne peut pas insérer deux n-uplets de même clé, ni laisser la clé primaire vide.
Contrainte d'intégrité référentielle : toute valeur prise par une clé étrangère doit exister comme valeur de clé primaire dans la table référencée (ou valoir NULL si autorisé). On ne peut pas référencer un auteur inexistant.
Conséquence pratique des contraintes : on ne peut pas supprimer un n-uplet encore référencé (supprimer un auteur dont des livres dépendent romprait l'intégrité référentielle), ni insérer un livre dont l'id_auteur ne correspond à aucun auteur. C'est le SGBD qui fait respecter ces règles.
∀ t∈livre,t.id_auteur∈{ a.id : a∈auteur } ∪ {NULL}\forall\ t \in \mathtt{livre},\quad t.\mathtt{id\_auteur} \in \{\,a.\mathtt{id}\ :\ a \in \mathtt{auteur}\,\}\ \cup\ \{\mathtt{NULL}\}∀ t∈livre,t.id_auteur∈{a.id : a∈auteur} ∪ {NULL}

Intégrité référentielle (formalisée)

Toute valeur de la clé étrangère id_auteur d'un n-uplet de livre doit appartenir à l'ensemble des clés primaires existantes de auteur (ou valoir NULL si c'est autorisé). C'est la règle que vérifie le SGBD à chaque insertion ou modification.

Exemple corrigé

Diagnostiquer des violations de contraintes d'intégrité

On a auteur(id, nom) et livre(isbn, titre, id_auteur), id_auteur étant clé étrangère vers auteur.id. auteur contient les id 7 et 12. On tente : (1) insérer livre('978-1', 'Essai', 99) ; (2) supprimer l'auteur 7 alors que le livre '978-1' (s'il existait) ou tout autre livre le référence. Pour chaque cas, dites la contrainte concernée et le verdict du SGBD.

  1. 01Cas (1) — insertion d'un livre

    On insère un livre avec id_auteur = 99. Or aucun auteur n'a l'id 99 (seuls 7 et 12 existent). La clé étrangère pointerait vers une clé primaire inexistante : c'est une violation de l'intégrité référentielle.

    99∉{ a.id : a∈auteur }={7, 12}99 \notin \{\,a.\mathtt{id}\ :\ a \in \mathtt{auteur}\,\} = \{7,\,12\}99∈/{a.id : a∈auteur}={7,12}
  2. 02Verdict du cas (1)

    Le SGBD refuse l'insertion. Pour qu'elle réussisse, il faudrait d'abord insérer l'auteur 99 dans auteur, puis insérer le livre.

  3. 03Cas (2) — suppression d'un auteur référencé

    On veut supprimer l'auteur 7. Si au moins un livre porte id_auteur = 7, supprimer l'auteur laisserait ces livres avec une clé étrangère pointant vers un n-uplet disparu : ce serait à nouveau une violation de l'intégrité référentielle.

  4. 04Verdict du cas (2)

    Tant que des livres référencent l'auteur 7, le SGBD refuse la suppression (sauf politique ON DELETE particulière). Il faut d'abord traiter les livres concernés (les supprimer ou réaffecter leur id_auteur).

Résultat : (1) Insertion refusée : id_auteur = 99 n'existe pas dans auteur (intégrité référentielle). (2) Suppression de l'auteur 7 refusée tant qu'un livre le référence (intégrité référentielle). Dans les deux cas, c'est le SGBD qui fait respecter automatiquement la contrainte.

Objectif Bac

  • Objectif Bac : sur un schéma à plusieurs tables, désigner la clé primaire de chaque relation et chaque clé étrangère, en indiquant quelle table elle référence.
  • Objectif Bac : étant donné une opération (insertion, suppression, modification) ou un jeu de données, repérer si une contrainte d'intégrité (de relation ou référentielle) est violée et expliquer pourquoi.

Erreurs fréquentes

  • Confondre clé primaire et clé étrangère : la clé primaire identifie les lignes de sa propre table ; la clé étrangère pointe vers la clé primaire d'une autre table.
  • Oublier qu'une clé primaire doit être non NULL et unique, ou autoriser une clé étrangère à pointer vers une valeur inexistante : ce sont précisément les deux contraintes d'intégrité que le SGBD interdit de violer.

Révision active

On a auteur(id, nom) et livre(isbn, titre, id_auteur) où id_auteur est une clé étrangère vers auteur.id. La table auteur contient les id 7 et 12. On tente : (1) d'insérer livre('978-1', 'Essai', 99) ; (2) de supprimer l'auteur 7 alors qu'un livre le référence. Pour chaque opération, dites quelle contrainte est en jeu et si l'opération est acceptée.

Rappel actif

Rappelle-toi les points clés — puis révèle.

Sources : Programme de spécialité Numérique et sciences informatiques — classe terminale (BO spécial n° 8 du 25 juillet 2019) (Ministère de l'Éducation nationale — Éduscol)

§ 03

Le système de gestion de bases de données (SGBD)#

●●○StandardLPeduscol-programme-nsi-terminale

Le SGBD, intermédiaire offrant quatre services autour de la base

Le SGBD, intermédiaire entre les applications et la baseGraphe, Applications / utilisateurs → SGBD (services de la base), SGBD (services de la base) → Base de données (fichiers)Applications /utilisateursSGBD (servicesde la base)Base de données(fichiers)requêtesaccès
Fig. 3Les applications n'accèdent jamais directement aux fichiers : elles passent par le SGBD (mis en évidence), qui garantit la persistance, la gestion des accès concurrents, l'efficacité et la sécurisation autour de la base de données centrale.

Points clés

Un SGBD (Système de Gestion de Bases de Données) est le logiciel placé entre les applications et les données : il stocke la base, en garantit la cohérence et exécute les requêtes (SQLite, PostgreSQL, MySQL/MariaDB…). On parle de SGBD relationnel quand les données sont organisées en relations.
Persistance : les données survivent à l'arrêt du programme et de la machine — elles sont écrites durablement sur disque, contrairement aux structures en mémoire vive qui disparaissent à la fin de l'exécution.
Gestion des accès concurrents : plusieurs utilisateurs peuvent lire et écrire en même temps sans corrompre les données. Le SGBD organise ces accès au moyen de transactions (suites d'opérations exécutées de façon « tout ou rien ») pour préserver la cohérence.
Efficacité : le SGBD répond rapidement même sur de gros volumes, grâce à des structures internes d'indexation qui évitent de parcourir toute la table à chaque requête (sans que l'on ait à les programmer soi-même).
Sécurisation : le SGBD protège les données (gestion de droits d'accès par utilisateur, sauvegardes, journalisation permettant la reprise après panne). Ces quatre services — persistance, accès concurrents, efficacité, sécurisation — sont précisément ce qu'un SGBD apporte par rapport à de simples fichiers.
Exemple corrigé

Associer une situation au service du SGBD concerné

Pour une billetterie en ligne, identifiez le service du SGBD mobilisé dans chacune de ces situations : (a) deux clients tentent au même instant d'acheter le dernier siège ; (b) après une coupure de courant, on doit retrouver toutes les ventes validées ; (c) une recherche par numéro de commande doit répondre instantanément sur des millions de lignes ; (d) seul un administrateur peut consulter les coordonnées bancaires.

  1. 01(a) Dernier siège, deux clients simultanés

    Deux écritures concurrentes sur la même donnée : c'est la gestion des accès concurrents. Via une transaction, le SGBD sérialise les opérations pour qu'un seul des deux clients obtienne le siège, sans double vente.

  2. 02(b) Retrouver les ventes après coupure

    Les données doivent survivre à l'arrêt brutal de la machine : c'est la persistance (écriture durable sur disque), renforcée par la sécurisation (journalisation/reprise après panne) qui garantit qu'une vente validée n'est pas perdue.

  3. 03(c) Recherche instantanée sur des millions de lignes

    Répondre vite sur un gros volume relève de l'efficacité : le SGBD utilise un index sur le numéro de commande pour ne pas parcourir toute la table.

  4. 04(d) Accès réservé à l'administrateur

    Restreindre l'accès à certaines données selon l'utilisateur relève de la sécurisation (gestion des droits d'accès).

Résultat : (a) accès concurrents ; (b) persistance (et sécurisation) ; (c) efficacité (indexation) ; (d) sécurisation (droits d'accès). Ces quatre situations illustrent les quatre services attendus d'un SGBD relationnel.

Objectif Bac

  • Objectif Bac : citer et expliquer les services rendus par un SGBD relationnel (persistance, gestion des accès concurrents, efficacité, sécurisation), idéalement en justifiant pourquoi de simples fichiers ne les offrent pas.
  • Objectif Bac : associer une situation concrète au service du SGBD qui la prend en charge (deux clients réservent le même siège → accès concurrents/transactions ; reprise après coupure de courant → persistance/sécurisation).

Erreurs fréquentes

  • Confondre le SGBD (le logiciel) avec la base de données (les données elles-mêmes) ou avec le langage SQL (le moyen d'interroger) : ce sont trois choses distinctes.
  • Réduire le SGBD au seul stockage : la valeur ajoutée tient surtout à la gestion des accès concurrents (transactions), à l'efficacité (index) et à la sécurisation, pas uniquement à la persistance.

Révision active

Une billetterie en ligne vend des places de concert. Décrivez, pour chacun des quatre services d'un SGBD (persistance, accès concurrents, efficacité, sécurisation), une situation où ce service est indispensable au bon fonctionnement de la billetterie.

Rappel actif

Rappelle-toi les points clés — puis révèle.

Sources : Programme de spécialité Numérique et sciences informatiques — classe terminale (BO spécial n° 8 du 25 juillet 2019) (Ministère de l'Éducation nationale — Éduscol)

§ 04

Interroger une base en SQL : SELECT, jointure, agrégation#

●●●ApprofondissementLPeduscol-programme-nsi-terminale

Une jointure : combiner livre et auteur sur la clé

Résultat de livre JOIN auteur ON id_auteur = idTableau de 2 colonnes et 3 lignes, Données: livre.titre · auteur.nom; Candide · Voltaire; Zadig · Voltaire; Germinal · ZolaLIVRE.TITREAUTEUR.NOMCandideVoltaireZadigVoltaireGerminalZola
Fig. 4La jointure livre JOIN auteur ON livre.id_auteur = auteur.id rapproche chaque livre de la ligne d'auteur dont l'id égale son id_auteur. La table résultat réunit titre et nom : c'est cette table qui est affichée ici.

Points clés

Le squelette d'une requête d'interrogation est : `SELECT <attributs> FROM <table> [JOIN <table2> ON <condition>] [WHERE <condition>] [GROUP BY <attribut>] [HAVING <condition>] [ORDER BY <attribut> [ASC|DESC]]`. SELECT * sélectionne toutes les colonnes.
Projection = choix des colonnes (la liste après SELECT). Sélection = choix des lignes vérifiant une condition (la clause WHERE). SELECT DISTINCT élimine les doublons du résultat. ORDER BY trie le résultat (ASC croissant par défaut, DESC décroissant).
Jointure (JOIN … ON …) : combine deux relations en rapprochant les lignes qui vérifient une condition d'égalité, typiquement clé étrangère = clé primaire (livre.id_auteur = auteur.id). On préfixe les attributs ambigus par le nom de la table.
Fonctions d'agrégation : COUNT (effectif), SUM (somme), AVG (moyenne), MIN, MAX. Elles condensent un ensemble de lignes en une seule valeur. GROUP BY calcule l'agrégat par groupe ; HAVING filtre ces groupes (alors que WHERE filtre les lignes avant regroupement).
Les conditions WHERE se construisent avec les comparateurs =, <>, <, >, <=, >=, les connecteurs AND, OR, NOT, ainsi que LIKE (motifs), IN (appartenance à une liste) et BETWEEN (intervalle). Attention : tester une valeur manquante s'écrit IS NULL, jamais = NULL.
SELECT a.nom, COUNT(*) AS nb\texttt{SELECT a.nom, COUNT(*) AS nb}SELECT a.nom, COUNT(*) AS nb

Compter les livres par auteur (1/3)

On projette le nom de l'auteur et le nombre de livres associés ; AS nb nomme la colonne calculée par l'agrégat COUNT(*).

FROM auteur AS a JOIN livre AS l ON l.id_auteur = a.id\texttt{FROM auteur AS a JOIN livre AS l ON l.id\_auteur = a.id}FROM auteur AS a JOIN livre AS l ON l.id_auteur = a.id

Compter les livres par auteur (2/3)

La jointure rapproche chaque livre de son auteur via l'égalité clé étrangère = clé primaire (l.id_auteur = a.id).

GROUP BY a.id, a.nom ORDER BY nb DESC;\texttt{GROUP BY a.id, a.nom ORDER BY nb DESC;}GROUP BY a.id, a.nom ORDER BY nb DESC;

Compter les livres par auteur (3/3)

On regroupe par auteur pour que COUNT(*) compte les livres de chacun, puis on trie du plus prolifique au moins prolifique.

COUNT(*) de livres par auteur (jeu d'exemple)

COUNT(*) de livres par auteurDiagramme en colonnes: nombre de livres selon auteur, Données: nombre de livres · Voltaire: 2; nombre de livres · Zola: 100.511.52VoltaireZola21nombre de livresauteur
Fig. 5Sur le jeu d'exemple, la requête GROUP BY id_auteur avec COUNT(*) renvoie deux groupes : Voltaire avec 2 livres (mis en évidence), Zola avec 1 livre.
Exemple corrigé

Trois requêtes d'interrogation : sélection-tri, jointure, agrégation

Avec auteur(id, nom) et livre(isbn, titre, annee, id_auteur), écrivez : (1) les titres des livres parus après 1850, triés par année croissante ; (2) le titre de chaque livre avec le nom de son auteur ; (3) le nombre de livres par auteur, du plus prolifique au moins prolifique.

  1. 01(1) Sélection + projection + tri (une table)

    Projection sur titre (et annee pour le tri), sélection des lignes telles que annee > 1850, tri croissant par annee.

    SELECT titre, annee FROM livre WHERE annee > 1850 ORDER BY annee ASC;\texttt{SELECT titre, annee FROM livre WHERE annee > 1850 ORDER BY annee ASC;}SELECT titre, annee FROM livre WHERE annee > 1850 ORDER BY annee ASC;
  2. 02(2) Jointure de deux tables

    On relie chaque livre à son auteur par l'égalité clé étrangère = clé primaire, puis on projette le titre et le nom.

    SELECT l.titre, a.nom FROM livre AS l JOIN auteur AS a ON l.id_auteur = a.id;\texttt{SELECT l.titre, a.nom FROM livre AS l JOIN auteur AS a ON l.id\_auteur = a.id;}SELECT l.titre, a.nom FROM livre AS l JOIN auteur AS a ON l.id_auteur = a.id;
  3. 03(3) Jointure + agrégation + regroupement + tri

    On joint livre et auteur, on regroupe par auteur, on compte les livres de chaque groupe avec COUNT(*), puis on trie ce comptage par ordre décroissant.

    SELECT a.nom, COUNT(*) AS nb FROM auteur AS a JOIN livre AS l ON l.id_auteur = a.id GROUP BY a.id, a.nom ORDER BY nb DESC;\texttt{SELECT a.nom, COUNT(*) AS nb FROM auteur AS a JOIN livre AS l ON l.id\_auteur = a.id GROUP BY a.id, a.nom ORDER BY nb DESC;}SELECT a.nom, COUNT(*) AS nb FROM auteur AS a JOIN livre AS l ON l.id_auteur = a.id GROUP BY a.id, a.nom ORDER BY nb DESC;
  4. 04Vérifier le résultat de (3) sur le jeu d'exemple

    Avec Candide (id_auteur 7) et Zadig (id_auteur 7) pour Voltaire, et Germinal (id_auteur 12) pour Zola : Voltaire totalise 2 livres, Zola 1. La requête renvoie donc (Voltaire, 2) puis (Zola, 1) grâce au tri décroissant.

Résultat : (1) renvoie les titres d'après-1850 triés par année ; (2) apparie chaque titre à son auteur par la jointure ; (3) renvoie (Voltaire, 2) puis (Zola, 1). La clé du sujet est de joindre sur l.id_auteur = a.id, puis de regrouper par auteur avant d'agréger.

Schritt-für-Schritt Erklärung4 Schritte
  1. 1

    Une requête d'interrogation suit toujours le même squelette : SELECT pour les colonnes, FROM pour les tables, WHERE pour filtrer les lignes, ORDER BY pour trier. Lisons-la dans cet ordre.

  2. 2

    Deux mots clés à ne jamais confondre : la projection choisit les colonnes, juste après SELECT ; la sélection choisit les lignes, dans la clause WHERE. L'une agit verticalement, l'autre horizontalement.

  3. 3

    Pour relier deux tables, on joint sur l'égalité clé étrangère égale clé primaire. Ici l'identifiant d'auteur du livre rejoint l'identifiant de la table auteur : chaque livre retrouve son auteur.

    Jointure sur l'égalité clé étrangère = clé primaire

    Jointure : clé étrangère = clé primaireGraphe, livre.id_auteur (clé étrangère) → auteur.id (clé primaire)livre.idauteur(clé étrangère)auteur.id (cléprimaire)jointure
    Abb.Joindre, c'est apparier les lignes sur l'égalité clé étrangère = clé primaire : chaque livre retrouve son auteur via livre.id_auteur = auteur.id.
  4. 4

    Enfin, pour compter ou totaliser, on regroupe avec GROUP BY puis on agrège avec COUNT, SUM ou AVG. Compter les livres par auteur donne, sur notre exemple, Voltaire deux, Zola un.

    COUNT(*) de livres par auteur

Objectif Bac

  • Objectif Bac : traduire en SQL un énoncé en français combinant projection, sélection, tri et, souvent, une jointure de deux tables — puis, inversement, décrire en français le résultat d'une requête donnée.
  • Objectif Bac : écrire une requête d'agrégation avec GROUP BY (par exemple « le nombre de livres par auteur ») et savoir quand employer HAVING plutôt que WHERE.

Erreurs fréquentes

  • Mettre dans le SELECT, à côté d'une fonction d'agrégation, un attribut qui n'est pas dans le GROUP BY : tout attribut non agrégé du SELECT doit figurer dans le GROUP BY.
  • Confondre WHERE et HAVING (WHERE filtre les lignes avant regroupement, HAVING filtre les groupes après agrégation), ou écrire `= NULL` au lieu de `IS NULL`. Oublier la condition de jointure produit par ailleurs un produit cartésien (toutes les combinaisons de lignes).

Révision active

Avec auteur(id, nom) et livre(isbn, titre, annee, id_auteur), écrivez les requêtes SQL pour : (1) les titres des livres parus après 1850, triés par année croissante ; (2) le titre de chaque livre accompagné du nom de son auteur ; (3) le nombre de livres écrits par chaque auteur, du plus prolifique au moins prolifique.

Rappel actif

Rappelle-toi les points clés — puis révèle.

Sources : Programme de spécialité Numérique et sciences informatiques — classe terminale (BO spécial n° 8 du 25 juillet 2019) (Ministère de l'Éducation nationale — Éduscol)

§ 05

Mettre à jour une base en SQL : INSERT, UPDATE, DELETE#

●●○StandardLPeduscol-programme-nsi-terminale

Les trois opérations de mise à jour sur une table

INSERT, UPDATE, DELETE : les trois mises à jourTableau de 3 colonnes et 3 lignes, Données: Opération · Rôle · Exemple SQL; INSERT · ajoute une ligne · INSERT INTO eleve VALUES (4, 'Roy', 'Tom', 'TG2'); UPDATE · modifie les lignes ciblées par WHERE · UPDATE eleve SET classe = 'TG1' WHERE id = 4; DELETE · retire les lignes ciblées par WHERE · DELETE FROM eleve WHERE id = 4, cellule mise en évidence : retire les lignes ciblées par WHEREOPÉRATIONRÔLEEXEMPLE SQLINSERTajoute une ligneINSERT INTO eleve VALUES (4,'Roy', 'Tom', 'TG2')UPDATEmodifie les lignes cibléespar WHEREUPDATE eleve SET classe ='TG1' WHERE id = 4DELETEretire les lignes cibléespar WHEREDELETE FROM eleve WHERE id =4
Fig. 6INSERT ajoute une ligne ; UPDATE modifie les valeurs des lignes ciblées par le WHERE ; DELETE retire les lignes ciblées par le WHERE. Attention : sans clause WHERE, UPDATE et DELETE agissent sur TOUTE la table.

Points clés

INSERT ajoute un ou plusieurs n-uplets : `INSERT INTO table (col1, col2, …) VALUES (v1, v2, …);`. Préciser la liste des colonnes est plus sûr ; les attributs omis prennent leur valeur par défaut (ou NULL). Les valeurs doivent respecter les domaines et les contraintes.
UPDATE modifie des n-uplets existants : `UPDATE table SET col = nouvelleValeur [, col2 = …] WHERE condition;`. On peut modifier plusieurs colonnes d'un coup. La clause WHERE désigne les lignes concernées.
DELETE supprime des n-uplets : `DELETE FROM table WHERE condition;`. Seules les lignes vérifiant la condition sont supprimées.
Avertissement capital : un UPDATE ou un DELETE sans clause WHERE s'applique à toutes les lignes de la table (modification ou effacement total). Le WHERE n'est pas optionnel en pratique.
Les mises à jour restent soumises aux contraintes d'intégrité : un INSERT ou un UPDATE qui rendrait une clé primaire non unique, ou une clé étrangère orpheline, est refusé ; un DELETE qui laisserait des références pendantes l'est aussi. Le SGBD vérifie après chaque opération.
INSERT INTO auteur (id, nom) VALUES (20, ’Hugo’);\texttt{INSERT INTO auteur (id, nom) VALUES (20, 'Hugo');}INSERT INTO auteur (id, nom) VALUES (20, ’Hugo’);

Insertion d'un n-uplet

On ajoute un auteur en précisant explicitement les colonnes ; la valeur de la clé primaire id doit être unique et non NULL.

UPDATE livre SET annee = 1869 WHERE isbn = ’978-9’;\texttt{UPDATE livre SET annee = 1869 WHERE isbn = '978-9';}UPDATE livre SET annee = 1869 WHERE isbn = ’978-9’;

Modification ciblée par la clé primaire

La clause WHERE isbn = '978-9' garantit qu'un seul livre est modifié ; sans elle, l'année de tous les livres serait écrasée.

DELETE FROM livre WHERE annee < 1800;\texttt{DELETE FROM livre WHERE annee < 1800;}DELETE FROM livre WHERE annee < 1800;

Suppression conditionnelle

Seuls les livres dont l'année est strictement antérieure à 1800 sont supprimés ; toutes les autres lignes sont conservées.

Exemple corrigé

Une séquence complète de mise à jour, contraintes comprises

Avec auteur(id, nom) et livre(isbn, titre, annee, id_auteur) : (1) ajoutez l'auteur (20, 'Hugo') ; (2) ajoutez ('978-9', 'Les Misérables', 1862, 20) ; (3) corrigez son année en 1869 ; (4) supprimez tous les livres parus avant 1800. Justifiez l'ordre (1) puis (2).

  1. 01(1) Insérer l'auteur

    On crée d'abord l'auteur, car le livre y fera référence par sa clé étrangère.

    INSERT INTO auteur (id, nom) VALUES (20, ’Hugo’);\texttt{INSERT INTO auteur (id, nom) VALUES (20, 'Hugo');}INSERT INTO auteur (id, nom) VALUES (20, ’Hugo’);
  2. 02(2) Insérer le livre référençant cet auteur

    Maintenant que l'auteur 20 existe, la clé étrangère id_auteur = 20 satisfait l'intégrité référentielle.

    INSERT INTO livre (isbn, titre, annee, id_auteur) VALUES (’978-9’, ’Les Miseˊrables’, 1862, 20);\texttt{INSERT INTO livre (isbn, titre, annee, id\_auteur) VALUES ('978-9', 'Les Misérables', 1862, 20);}INSERT INTO livre (isbn, titre, annee, id_auteur) VALUES (’978-9’, ’Les Miseˊrables’, 1862, 20);
  3. 03(3) Corriger l'année du livre

    On cible le seul livre concerné par sa clé primaire isbn, et on remplace l'année.

    UPDATE livre SET annee = 1869 WHERE isbn = ’978-9’;\texttt{UPDATE livre SET annee = 1869 WHERE isbn = '978-9';}UPDATE livre SET annee = 1869 WHERE isbn = ’978-9’;
  4. 04(4) Supprimer les livres antérieurs à 1800

    La condition WHERE annee < 1800 limite la suppression aux seules lignes voulues ; le livre de 1869 n'est pas touché.

    DELETE FROM livre WHERE annee < 1800;\texttt{DELETE FROM livre WHERE annee < 1800;}DELETE FROM livre WHERE annee < 1800;
  5. 05Justifier l'ordre (1) puis (2)

    Si l'on insérait le livre avant l'auteur, sa clé étrangère id_auteur = 20 pointerait vers un auteur inexistant : l'intégrité référentielle serait violée et le SGBD refuserait l'insertion. On crée donc toujours la ligne référencée avant la ligne qui la référence.

Résultat : Les quatre requêtes s'écrivent INSERT / INSERT / UPDATE / DELETE avec, à chaque mise à jour ciblée, une clause WHERE sur la clé primaire ou sur la condition voulue. L'ordre (1) avant (2) est imposé par l'intégrité référentielle : l'auteur doit exister avant le livre qui le référence.

Objectif Bac

  • Objectif Bac : écrire correctement les trois requêtes de mise à jour à partir d'un énoncé (ajouter tel enregistrement, corriger telle valeur, supprimer telles lignes), en n'oubliant jamais la clause WHERE pour UPDATE et DELETE.
  • Objectif Bac : anticiper l'effet d'une mise à jour sur les contraintes d'intégrité (par exemple, expliquer pourquoi un DELETE est refusé tant que des clés étrangères pointent vers la ligne visée).

Erreurs fréquentes

  • Omettre la clause WHERE dans UPDATE ou DELETE : l'opération s'applique alors à toute la table — erreur classique aux conséquences irréversibles.
  • Oublier que les contraintes d'intégrité s'appliquent aussi aux mises à jour : insérer une clé étrangère inexistante, dupliquer une clé primaire ou supprimer une ligne encore référencée sera refusé par le SGBD.

Révision active

Avec auteur(id, nom) et livre(isbn, titre, annee, id_auteur) : (1) ajoutez l'auteur (id 20, nom 'Hugo') ; (2) ajoutez le livre ('978-9', 'Les Misérables', 1862, 20) ; (3) corrigez l'année du livre d'isbn '978-9' en 1869 ; (4) supprimez tous les livres parus avant 1800. Indiquez aussi pourquoi l'ordre des étapes (1) puis (2) est important.

Rappel actif

Rappelle-toi les points clés — puis révèle.

Sources : Programme de spécialité Numérique et sciences informatiques — classe terminale (BO spécial n° 8 du 25 juillet 2019) (Ministère de l'Éducation nationale — Éduscol)

Sommaire

Section -- / 05

    • 01Le modèle relationnel : relations, attributs et schéma○
    • 02Clés primaires, clés étrangères et contraintes d'intégrité◐
    • 03Le système de gestion de bases de données (SGBD)◐
    • 04Interroger une base en SQL : SELECT, jointure, agrégation●
    • 05Mettre à jour une base en SQL : INSERT, UPDATE, DELETE◐

0/5 Lues

Des fiches à l'entraînement

Bases de données relationnelles et SQL

Consolide ce thème avec des questions de la banque de questions.

~21
min
4
Compétences
S'entraîner

Références et sources

Sources

Ministère de l'Éducation nationale — Éduscol

  • Programme de spécialité Numérique et sciences informatiques — classe terminale (BO spécial n° 8 du 25 juillet 2019)

Chapitre précédent

Algorithmes sur les arbres et les graphes

Chapitre suivant

Architectures matérielles et systèmes d'exploitation

EuraStudy·Fiches T·08·MMXXVI

Continuez avec le chapitre suivant — le parcours est conservé.