NSI · Terminale · Contrôle n°1

Bases de données relationnelles — SQL

60 minutes noté sur 205 exercices

Un contrôle de NSI de 60 minutes sur les bases de données : clé primaire et clé étrangère, l'ordre d'exécution qui sépare WHERE de HAVING, la jointure dont l'oubli de condition ne produit aucune erreur, et l'injection SQL dont la parade est structurelle. Vingt points, barème détaillé, et une correction qui dit pourquoi à chaque question.

Imprimer le contrôle

Deux PDF à imprimer, sur papier A4. Gratuit, sans inscription.

Avant de commencer

  • Compter les tables jointes : il faut une condition de moins que de tables.
  • Une jointure sans condition n’échoue pas, elle ment.
  • WHERE filtre les lignes, HAVING filtre les groupes.
  • Une injection fait interpréter comme du code ce qui était une donnée.
  • Filtrer les caractères dangereux est une parade partielle.
  • Un résultat anormalement volumineux signale une condition manquante.

Exercice 1 — Le modèle relationnel

4 pts · 11 min

Définir les clés

Réponds à chaque question.

  1. 1.Qu’est-ce qu’une clé primaire ?

    1 pt
    Voir la correction

    Une colonne qui identifie de façon unique chaque ligne d’une table.

    Deux lignes ne peuvent pas la partager, et elle ne peut pas être vide.

  2. 2.Qu’est-ce qu’une clé étrangère ?

    1 pt
    Voir la correction

    Une colonne qui référence la clé primaire d’une autre table.

    C’est elle qui établit le lien entre deux tables.

  3. 3.Que garantit la contrainte d’intégrité référentielle ?

    1 pt
    Voir la correction

    Qu’une clé étrangère pointe toujours vers une ligne qui existe.

    Sans elle, une référence pourrait désigner une ligne supprimée.

  4. 4.Quel est l’intérêt de cette organisation ?

    1 pt
    Voir la correction

    Éviter la redondance : une information n’est stockée qu’à un seul endroit.

    Sinon, la moindre omission dans une correction produirait deux versions contradictoires.

Exercice 2 — Interroger une table

5 pts · 14 min

Écrire et lire une requête SQL

Réponds à chaque question.

  1. 1.Qu’indiquent SELECT et FROM ?

    1 pt
    Voir la correction

    SELECT indique les colonnes à afficher, FROM la table.

    Ce sont les deux clauses minimales d’une requête.

  2. 2.Sur quoi porte WHERE ?

    1 pt
    Voir la correction

    Sur le filtrage des lignes.

    Il s’applique avant tout regroupement.

  3. 3.Que fait GROUP BY, et qu’est-ce que cela permet ?

    1 pt
    Voir la correction

    Il regroupe les lignes partageant une valeur, ce qui permet d’appliquer une fonction d’agrégat — compte, somme, moyenne.

    Sans regroupement, l’agrégat porterait sur la totalité des lignes.

  4. 4.Sur quoi porte HAVING ?

    1 pt
    Voir la correction

    Sur le filtrage des groupes.

    WHERE filtre les lignes, HAVING filtre les groupes.

  5. 5.Pourquoi une condition sur un agrégat ne peut-elle pas figurer dans un WHERE ?

    1 pt
    Voir la correction

    Parce qu’au moment où WHERE s’applique, les groupes n’existent pas encore.

    Les lignes sont d’abord filtrées, puis regroupées, puis les groupes filtrés.

Exercice 3 — Joindre deux tables

4 pts · 11 min

Construire une jointure

Réponds à chaque question.

  1. 1.Que fait une jointure, et selon quelle condition ?

    1 pt
    Voir la correction

    Elle rapproche deux tables selon une condition qui relie la clé étrangère de l’une à la clé primaire de l’autre.

    C’est cette correspondance qui donne un sens au rapprochement.

  2. 2.Que produit une jointure sans condition ?

    1 pt
    Voir la correction

    Elle associe chaque ligne de la première table à toutes les lignes de la seconde.

    Le nombre de lignes obtenu est le produit des deux tailles.

  3. 3.Pourquoi cette faute est-elle silencieuse ?

    1 pt
    Voir la correction

    Parce que la requête est parfaitement valide du point de vue du moteur : elle s’exécute et renvoie un résultat.

    Sur de petites tables de test, l’anomalie passe inaperçue.

  4. 4.Combien de conditions de rapprochement faut-il pour trois tables jointes ?

    1 pt
    Voir la correction

    Deux.

    Il faut une condition de moins que de tables.

Exercice 4 — L'injection SQL

4 pts · 13 min

Analyser l'injection SQL

Réponds à chaque question.

  1. 1.En quoi consiste une injection SQL ?

    1 pt
    Voir la correction

    À faire interpréter comme du code ce qui était censé être une donnée.

    La saisie peut contenir des caractères qui referment la chaîne attendue.

  2. 2.Quand survient-elle ?

    1 pt
    Voir la correction

    Dès qu’une requête est construite en concaténant une saisie d’utilisateur.

    La faille vient du mélange entre la structure de la requête et les valeurs qu’on y place.

  3. 3.En quoi consiste une requête préparée ?

    1 pt
    Voir la correction

    À déclarer d’abord la structure de la requête, puis à y passer les valeurs séparément.

    Le moteur sait alors que ces valeurs sont des données et ne les interprète jamais comme du code.

  4. 4.Pourquoi filtrer les caractères dangereux n’est-il qu’une parade partielle ?

    1 pt
    Voir la correction

    Parce que cela suppose qu’on a pensé à tous les cas, ce qui n’est jamais démontrable.

    La parade structurelle ne dépend pas de cette énumération.

Exercice 5 — Trouve l'erreur

3 pts · 11 min

Repérer une erreur et la corriger

Chaque affirmation est fausse. Écris ce qu’il fallait dire.

  1. 1.« J’ai mis la condition « plus de trois commandes » dans le WHERE. »

    1 pt
    Voir la correction

    Une condition portant sur un agrégat relève de HAVING.

    Au moment où WHERE s’applique, les groupes n’existent pas encore.

  2. 2.« Ma requête sur deux tables renvoie un million de lignes : le moteur a un bug. »

    1 pt
    Voir la correction

    Il manque la condition de rapprochement : le moteur a produit toutes les combinaisons possibles.

    La requête est valide et son résultat n’a aucun sens.

  3. 3.« Je construis ma requête en ajoutant la saisie de l’utilisateur au texte SQL. »

    1 pt
    Voir la correction

    Il faut une requête préparée, qui déclare la structure puis passe les valeurs séparément.

    La concaténation est exactement ce qui ouvre la faille d’injection.

Barème — ce que le correcteur regarde

Les lignes chiffrées couvrent les 5 exercices et totalisent 20 points.

Ex.1Le modèle relationnel

4 points — 1 par question

Point perdu si : Clé primaire et clé étrangère confondues.

Ex.2Interroger une table

5 points — 1 par question

Point perdu si : Une condition sur un agrégat placée dans WHERE.

Ex.3Joindre deux tables

4 points — 1 par question

Point perdu si : Une jointure sans condition décrite comme une erreur du moteur.

Ex.4L’injection SQL

4 points — 1 par question

Point perdu si : Le filtrage des caractères présenté comme une parade suffisante.

Ex.5L’erreur repérée, et la réponse juste donnée

3 points — 1 par ligne

Point perdu si : Une correction qui laisse la concaténation en place.

Et maintenant ?

16 à 20
Le chapitre est acquis. Entraîne-toi maintenant à construire une requête en cinq temps : les tables nécessaires, les clés étrangères qui les relient, la jointure et son décompte de conditions, le filtrage au bon endroit, et la vérification du nombre de lignes.
10 à 15
Refais l'exercice 3 en comptant chaque fois les tables et les conditions : il en faut une de moins que de tables.
moins de 10
Reprends la fiche de cours et retiens pourquoi l'oubli de condition est la faute la plus silencieuse : la requête est valide, elle s'exécute, et son résultat n'a aucun sens.

Les autres contrôles de nsi Terminale

Toutes les évaluations de nsi Terminale

Programme de terminale générale, enseignement de spécialité — BO spécial n°8 du 25 juillet 2019 · Contrôle rédigé pour ProgresSchool, version 2026.1.