NSI · Terminale · Contrôle n°1
Bases de données relationnelles — SQL
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 minDéfinir les clés
Réponds à chaque question.
1.Qu’est-ce qu’une clé primaire ?
1 ptVoir 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.Qu’est-ce qu’une clé étrangère ?
1 ptVoir 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.Que garantit la contrainte d’intégrité référentielle ?
1 ptVoir 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.Quel est l’intérêt de cette organisation ?
1 ptVoir 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.Qu’indiquent SELECT et FROM ?
1 ptVoir la correction
SELECT indique les colonnes à afficher, FROM la table.
Ce sont les deux clauses minimales d’une requête.
2.Sur quoi porte WHERE ?
1 ptVoir la correction
Sur le filtrage des lignes.
Il s’applique avant tout regroupement.
3.Que fait GROUP BY, et qu’est-ce que cela permet ?
1 ptVoir 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.Sur quoi porte HAVING ?
1 ptVoir la correction
Sur le filtrage des groupes.
WHERE filtre les lignes, HAVING filtre les groupes.
5.Pourquoi une condition sur un agrégat ne peut-elle pas figurer dans un WHERE ?
1 ptVoir 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 minConstruire une jointure
Réponds à chaque question.
1.Que fait une jointure, et selon quelle condition ?
1 ptVoir 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.Que produit une jointure sans condition ?
1 ptVoir 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.Pourquoi cette faute est-elle silencieuse ?
1 ptVoir 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.Combien de conditions de rapprochement faut-il pour trois tables jointes ?
1 ptVoir la correction
Deux.
Il faut une condition de moins que de tables.
Exercice 4 — L'injection SQL
4 pts · 13 minAnalyser l'injection SQL
Réponds à chaque question.
1.En quoi consiste une injection SQL ?
1 ptVoir 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.Quand survient-elle ?
1 ptVoir 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.En quoi consiste une requête préparée ?
1 ptVoir 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.Pourquoi filtrer les caractères dangereux n’est-il qu’une parade partielle ?
1 ptVoir 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 minRepérer une erreur et la corriger
Chaque affirmation est fausse. Écris ce qu’il fallait dire.
1.« J’ai mis la condition « plus de trois commandes » dans le WHERE. »
1 ptVoir 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.« Ma requête sur deux tables renvoie un million de lignes : le moteur a un bug. »
1 ptVoir 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.« Je construis ma requête en ajoutant la saisie de l’utilisateur au texte SQL. »
1 ptVoir 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
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.