Numérique et sciences informatiques (spécialité) · TerminaleBac
SQL : jointures et mises à jour, quiz de Terminale NSI
Publié le 7 novembre 2026 · Mis à jour le 7 novembre 2026 · Signaler une erreur
L'essentiel
JOIN ... ONrelie deux tables en comparant, dans la clauseON, une clé étrangère à la clé primaire qu'elle désigne.- Un produit cartésien (deux tables sans condition de liaison) renvoie autant de lignes que le produit des tailles des tables.
ANDexige que les deux conditions soient vraies,ORqu'au moins l'une le soit.UPDATE table SET colonne = valeur WHERE conditionmodifie les lignes ciblées ; sansWHERE, toute la table est modifiée.INSERT INTO table (colonnes) VALUES (valeurs)ajoute une ligne : colonnes et valeurs doivent correspondre en nombre et en ordre.
Avant de commencer
Ce quiz porte sur les requêtes SQL qui croisent plusieurs tables et sur celles qui modifient les données. Le programme de spécialité NSI demande de savoir écrire des requêtes avec les opérateurs logiques AND et OR ainsi que des jointures JOIN ... ON 2. Il demande aussi de construire des requêtes d'insertion et de mise à jour, notamment avec UPDATE 2.
Tu as déjà vu le modèle relationnel, le rôle d'un SGBD et les requêtes de sélection simples. Ici, on va plus loin : relier des tables, combiner des conditions, puis changer le contenu d'une base.
Toutes les questions s'appuient sur la même petite base, un lycée fictif. Elle contient deux tables.
La table classes décrit les classes :
| id_classe | nom |
|---|---|
| 10 | TG1 |
| 20 | TG2 |
| 30 | TG3 |
La table eleves décrit les élèves. La colonne id_classe est une clé étrangère : elle contient l'identifiant d'une ligne de classes.
| id_eleve | nom | id_classe | moyenne |
|---|---|---|---|
| 1 | Alice | 10 | 14 |
| 2 | Bastien | 10 | 9 |
| 3 | Chloé | 20 | 12 |
| 4 | David | 20 | 16 |
Quiz
14 questions · correction immédiate · ton score reste sur ton appareil.
-
La clause
ONdonne le critère de rapprochement : on associe les lignes pour lesquelles la clé étrangèreeleves.id_classeest égale à la clé primaireclasses.id_classe. Le filtrage de lignes se fait avecWHERE, le tri avecORDER BYet la suppression des doublons avecDISTINCT: ce sont les confusions fréquentes. -
Chaque élève a une valeur de
id_classequi existe dansclasses(10 ou 20), donc chacun des 4 élèves est associé à exactement une classe : 4 lignes. On aurait tort de répondre 3 en comptant les classes : la classe TG3 n'a aucun élève et n'apparaît donc pas, mais elle ne retire aucune ligne côté élèves. -
Sans condition, chaque ligne de
elevesest associée à chaque ligne declasses: lignes. Répondre 7 (addition) est l'erreur tentante : il s'agit d'un produit, pas d'une somme. C'est ce qui arrive quand on oublie la condition de jointure. -
La classe TG2 a pour identifiant 20 : elle contient Chloé (12) et David (16). Avec
AND, les deux conditions doivent être vraies, et seul David a une moyenne supérieure ou égale à 15 : 1 ligne. Si on répondait 2, on oublierait queANDest plus restrictif que le simple filtre sur la classe. -
Avec
OR, il suffit qu'une des deux conditions soit vraie. Bastien (9) vérifie la première, David (16) la seconde : 2 élèves. Alice (14) et Chloé (12) ne vérifient aucune des deux. ÉcrireANDà la place donnerait 0 résultat, car aucune moyenne n'est à la fois inférieure à 10 et supérieure à 15. -
L'ordre attendu est
UPDATE table SET colonne = valeur WHERE condition. La deuxième requête est syntaxiquement correcte mais, sansWHERE, elle donnerait 10 à tous les élèves. La troisième placeWHEREavantSET, ce qui n'est pas valide. La dernière n'est pas du SQL. -
C'est vrai : sans
WHERE, aucune ligne n'est écartée et la modification s'applique à toute la table. Penser que le SGBD ne modifie « qu'une ligne par défaut » est une erreur dangereuse. Pour cibler un seul élève, on ajoute par exempleWHERE id_eleve = 1. -
La forme correcte est
INSERT INTO table (colonnes) VALUES (valeurs). La dernière propose 4 valeurs pour 2 colonnes : le nombre de colonnes et de valeurs doit être identique.UPDATEmodifie une ligne existante, elle n'en crée pas : si l'élève 5 n'existe pas, rien ne change. -
Quand deux tables ont une colonne du même nom, le SGBD ne sait pas laquelle désigner : on préfixe par le nom de la table. Ce n'est pas toujours obligatoire : une colonne dont le nom n'existe que dans une table peut s'écrire seule. Le préfixe n'est donc pas lié à
WHEREet son but n'est pas la vitesse. -
Le
WHEREcible les élèves de la classe 20, c'est-à-dire Chloé et David. La nouvelle valeur est calculée à partir de l'ancienne : . Répondre 1 serait confondre « ajouter 1 » et « mettre à 1 ». -
Alice appartient désormais à la classe d'identifiant 30, c'est-à-dire TG3, qui n'avait aucun élève. La jointure retrouve donc 1 élève pour TG3. Les classes TG1 (seulement Bastien) et TG2 (Chloé et David) ne sont pas concernées par la modification.
-
La jointure sert à lire des données de plusieurs tables ensemble : elle est souvent fondée sur une clé étrangère et une clé primaire, et on peut filtrer le résultat avec
WHERE. Elle ne modifie rien dans les tables : seulesUPDATE,INSERTou une suppression changent les données. -
Il faut une condition de liaison dans
ON(clé étrangère = clé primaire), puis unWHEREsur le nom de la classe. La deuxième requête n'a pas deON. La troisième utiliseONsansJOIN. La dernière compare des noms d'élèves et de classes, qui n'ont aucun lien logique. -
C'est faux : avec
AND, les deux conditions doivent être vraies en même temps. C'estORqui conserve une ligne dès qu'une condition au moins est vraie. Beaucoup d'élèves inversent les deux parce qu'en français « et » semble tout ajouter, alors qu'ici il restreint le résultat.
Les questions qu'on se pose
Quelle est la différence entre JOIN et WHERE pour relier deux tables ?
JOIN ... ON exprime clairement le lien entre les tables (clé étrangère égale à clé primaire), puis WHERE sert à filtrer le résultat. Le programme demande de maîtriser la jointure avec JOIN ... ON 2. Garder le lien dans ON et le filtre dans WHERE rend la requête plus lisible et évite d'oublier la condition de liaison.
Comment éviter de modifier toute une table avec UPDATE par erreur ?
Écris d'abord la clause WHERE, puis le SET. Tu peux aussi tester la condition avec un SELECT qui utilise le même WHERE : si les lignes affichées sont bien celles à modifier, remplace le SELECT par l'UPDATE. Le programme associe les requêtes de mise à jour à UPDATE 2, et la condition est ce qui limite son effet.
Sources
- Spécialité NSI – Numérique et Sciences Informatiques, Éduscol STI. Consulté le 7 novembre 2026.
- Baccalauréat général 2025 – Numérique et sciences informatiques, Ministère de l'Éducation Nationale. Consulté le 7 novembre 2026.
Les numéros dans le texte renvoient à ces sources. Une source qui ne dit pas ce qu'on lui fait dire ? Signale-le.