Aller au contenu

Numérique et sciences informatiques (spécialité) · TerminaleBac

Langage SQL : les requêtes, cours de Terminale NSI

Publié le 7 novembre 2026 · Mis à jour le 7 novembre 2026 · Signaler une erreur

L'essentiel

  • Une requête SQL décrit les données voulues (par leur contenu), pas la manière de les chercher 5.
  • Squelette : SELECT colonnes FROM table WHERE condition ORDER BY colonne ; DESC pour l'ordre décroissant 5.
  • WHERE filtre les lignes avant le calcul ; les fonctions d'agrégat (COUNT, SUM, AVG, MIN, MAX) résument plusieurs lignes en une valeur.
  • Pour aller plus loin (hors programme du bac) : GROUP BY regroupe les lignes qui partagent une valeur 5 et HAVING filtre ensuite les groupes.
  • Au bac, les requêtes SQL sont rédigées à la main, sans calculatrice : l'exercice de bases de données fait partie du sujet 13.

Pourquoi apprendre à écrire des requêtes

Dans le cours précédent, tu as vu qu'une base de données relationnelle range l'information dans des tables, c'est-à-dire des tableaux de lignes (les enregistrements) et de colonnes (les attributs), gérés par un système de gestion de bases de données. Stocker ne suffit pas : il faut aussi retrouver, filtrer, trier et résumer ces données. C'est le rôle d'un langage de requête.

Un langage de requête sert à accéder aux données d'une base. Il permet de ne conserver que les données qui répondent à des conditions, appelées critères de sélection : par exemple, les habitants d'une ville précise 5. Les résultats peuvent être triés, ou regroupés d'après la valeur d'une donnée 5. Parmi tous ces langages, SQL est celui que l'on rencontre le plus souvent 5.

Un peu d'histoire pour situer l'outil. Edgar Frank Codd propose le modèle relationnel, puis introduit en 1971 plusieurs langages, dont l'algèbre relationnelle 5. Vers 1973, Chamberlin et Boyce conçoivent un langage baptisé d'abord SEQUEL, qui prendra par la suite le nom de SQL 5. SQL devient un standard des bases relationnelles : l'ANSI le normalise en 1986, puis l'ISO en 1987.

Une particularité de SQL te servira toute l'année : on atteint les données grâce à ce qu'elles contiennent, et non en suivant un chemin d'accès 5. Tu n'écris pas « parcours la table ligne par ligne et compare » ; tu décris ce que tu veux obtenir, et c'est le SGBD qui décide comment le calculer. C'est très différent de Python, où tu écris une boucle.

Pour le bac, retiens que le sujet de NSI comporte des exercices indépendants, et que, lorsque des requêtes de bases de données sont demandées, elles doivent être rédigées en SQL 1. L'épreuve dure 3 h 30 et la calculatrice n'est pas autorisée 3. Les requêtes s'écrivent donc à la main : la syntaxe doit devenir un réflexe.

Ce cours couvre l'interrogation d'une seule table : sélectionner, filtrer, trier, compter, regrouper. Les jointures entre tables et les mises à jour des données (insertion, modification, suppression) font l'objet du cours suivant.

Notre table d'exemple

Pour tout le cours, nous utilisons une table fictive eleves, qui décrit six élèves d'un lycée. Les valeurs sont inventées pour s'entraîner.

La table eleves
idnomclassenote_nsi
1AdaT114
2BorisT19
3ChloéT216
4DylanT212
5EmmaT117
6FaridT28
La table eleves · Table fictive utilisée dans tous les exemples du cours.

SELECT ... FROM : choisir des colonnes

WHERE : filtrer les lignes

ORDER BY : trier le résultat

Sans consigne, l'ordre des lignes du résultat n'est pas garanti : un affichage trié se demande explicitement 5. La clause ORDER BY se place à la fin de la requête, suivie du nom de la colonne servant au tri 5.

Les fonctions d'agrégation

GROUP BY et HAVING : regrouper

Pour aller plus loin (hors programme du bac). Un langage de requête sait aussi rassembler les lignes qui partagent une même valeur, par exemple les habitants d'une même rue 5. En SQL, c'est la clause GROUP BY. Le programme de NSI ne l'exige pas : au bac, les agrégats s'utilisent sans GROUP BY ni HAVING.

Ordre d'écriture et ordre de raisonnement

Comment le SGBD raisonne sur une requêteÉtapes successives : choisir la table, filtrer les lignes, regrouper, filtrer les groupes, puis calculer l'affichage et trier.1FROMOn part de la table indiquée2WHEREOn garde les lignes qui vérifient la condition3GROUP BYOn forme des groupes de lignes4HAVINGOn garde les groupes qui conviennent5SELECT puis ORDER BYOn calcule les colonnes, puis on trie
  1. FROMOn part de la table indiquée
  2. WHEREOn garde les lignes qui vérifient la condition
  3. GROUP BYOn forme des groupes de lignes
  4. HAVINGOn garde les groupes qui conviennent
  5. SELECT puis ORDER BYOn calcule les colonnes, puis on trie
Comment le SGBD raisonne sur une requête · Ordre de raisonnement, différent de l'ordre d'écriture.

Pièges fréquents et réflexes pour le bac

Exercices corrigés

Exercice 1 Premières requêtes sur la table eleves

★☆☆Environ 8 min

On utilise la table eleves(id, nom, classe, note_nsi) du cours : Ada (T1, 14), Boris (T1, 9), Chloé (T2, 16), Dylan (T2, 12), Emma (T1, 17), Farid (T2, 8).

  1. Écris la requête qui donne les noms de tous les élèves de T1.
  2. Écris la requête qui donne les noms et notes des élèves ayant strictement moins de 10, du plus petit au plus grand.
  3. Quel est le résultat de la seconde requête ?
Indice 1

Une chaîne de caractères s'écrit entre apostrophes.

Indice 2

Le tri par défaut est croissant : pas besoin de DESC.

Voir la correction pas à pas
  1. Question 1 : on lit une seule table, eleves, et on affiche seulement nom. Le filtre porte sur la classe : SELECT nom FROM eleves WHERE classe = 'T1';.

  2. Question 2 : on affiche nom et note_nsi. La condition « strictement moins de 10 » s'écrit note_nsi < 10. Le tri croissant est celui par défaut : SELECT nom, note_nsi FROM eleves WHERE note_nsi < 10 ORDER BY note_nsi;.

  3. Question 3 : les notes strictement inférieures à 10 sont 9 (Boris) et 8 (Farid). Triées de la plus petite à la plus grande : Farid 8, puis Boris 9.

Tu as combiné SELECT, WHERE et ORDER BY : c'est la structure de la majorité des questions simples au bac.

Exercice 2 Moyenne par classe (pour aller plus loin, hors programme du bac)

★★☆Environ 10 min

Avec la même table eleves, on veut connaître, pour chaque classe, l'effectif et la moyenne des notes.

  1. Écris la requête.
  2. Calcule à la main la moyenne de la classe T2 (Chloé 16, Dylan 12, Farid 8).
  3. On ne veut garder que les classes dont la moyenne dépasse 12,5. Complète la requête.
Indice 1

Il faut un regroupement par classe, avec deux agrégats.

Indice 2

Une condition sur une moyenne se place dans HAVING.

Voir la correction pas à pas
  1. Pour calculer un résultat par classe, on regroupe avec GROUP BY classe. On affiche la classe, l'effectif avec COUNT(*) et la moyenne avec AVG(note_nsi) : SELECT classe, COUNT(*), AVG(note_nsi) FROM eleves GROUP BY classe;.

  2. Moyenne de T2 : on additionne 16 + 12 + 8 = 36, puis on divise par 3 élèves. On obtient 12.

  3. Pour filtrer sur la moyenne, on ajoute HAVING AVG(note_nsi) > 12.5 après le GROUP BY. WHERE serait refusé, car la moyenne n'est connue qu'après le regroupement. Seule T1 (moyenne environ 13,33) reste.

Le couple GROUP BY / HAVING répond aux questions « par classe, par catégorie… » avec un critère sur le résultat du groupe.

Exercice 3 Compter les élèves ayant la moyenne en T1

★★☆Environ 8 min

On veut savoir combien d'élèves de T1 ont une note supérieure ou égale à 10.

  1. Écris la requête SQL qui renvoie ce nombre.
  2. Donne la valeur renvoyée à partir de la table : Ada 14, Boris 9, Emma 17 pour T1.
Indice 1

Deux conditions à relier avec AND.

Indice 2

Pour compter, on utilise COUNT(*) sur les lignes qui passent le filtre.

Voir la correction pas à pas
  1. Les deux conditions portent sur des lignes : la classe est 'T1' et la note est au moins 10. On les relie par AND.

  2. La requête est SELECT COUNT(*) FROM eleves WHERE classe = 'T1' AND note_nsi >= 10;.

  3. Parmi les trois élèves de T1, Boris (9) est écarté. Ada (14) et Emma (17) restent : le résultat est 2.

Le filtre WHERE s'applique avant le comptage : COUNT(*) compte seulement les lignes retenues.

Quiz

8 questions · correction immédiate · ton score reste sur ton appareil.

  1. Quelle requête affiche les noms des élèves de la classe T2 ?

  2. Quelle clause permet un affichage du plus grand au plus petit ?

  3. Où se place la clause ORDER BY dans une requête ?

  4. Que renvoie SELECT COUNT(*) FROM eleves WHERE note_nsi >= 12; avec la table du cours (14, 9, 16, 12, 17, 8) ?

  5. (Pour aller plus loin, hors programme du bac) Une condition sur la moyenne de chaque classe (AVG(note_nsi) > 12.5) doit se placer dans :

  6. Quelles affirmations sur SQL sont correctes ? (plusieurs réponses)

    Plusieurs réponses possibles.

  7. DISTINCT sert à supprimer les doublons dans le résultat.

  8. (Pour aller plus loin, hors programme du bac) Que fait SELECT classe, COUNT(*) FROM eleves GROUP BY classe; ?

Les questions qu'on se pose

Quelle différence entre WHERE et HAVING ?

(HAVING est hors programme du bac.) WHERE filtre les lignes avant tout regroupement ; il ne peut pas contenir d'agrégat. HAVING filtre les groupes après GROUP BY et peut contenir des agrégats comme AVG(...) ou COUNT(*). Si ta condition porte sur une valeur propre à une ligne (une note), c'est WHERE. Si elle porte sur un résultat de groupe (une moyenne), c'est HAVING.

À quoi sert SQL, puisque je sais déjà programmer en Python ?

En Python, tu décris comment parcourir les données. En SQL, tu décris ce que tu veux : les données se désignent par leur contenu, sans itinéraire à suivre 5. Les bases de données stockent souvent des millions de lignes ; laisser le SGBD chercher est plus simple et plus fiable qu'une boucle écrite à la main. Au bac, l'énoncé précise d'ailleurs quand une réponse doit être rédigée en SQL 1.

Est-ce que SQL tombe au bac ?

Oui : les sujets de NSI comportent un exercice consacré aux bases de données relationnelles et au langage SQL, parmi des exercices indépendants, sur 3 h 30 sans calculatrice 13. Les requêtes se rédigent à la main : entraîne-toi à les écrire sur papier, en vérifiant l'ordre des clauses.

Les majuscules comptent-elles dans une requête ?

Pour les mots-clés (SELECT, WHERE…), non. Pour les valeurs de texte comparées, la valeur doit correspondre à ce qui est stocké dans la base. Par convention, on écrit les mots-clés en majuscules pour que la requête reste lisible.

Pourquoi mon résultat n'est-il pas trié alors que je n'ai rien demandé ?

Parce que l'ordre n'est jamais garanti sans consigne : il faut demander le tri avec ORDER BY 5. Si l'ordre te semble « bon » par hasard, rien ne dit qu'il le restera. N'oublie pas DESC pour un tri décroissant 5.

Sources

  1. Spécialité NSI — Numérique et Sciences Informatiques (ressources et documentations), éduscol STI. Consulté le 7 novembre 2026.
  2. Baccalauréat général — Épreuve d'enseignement de spécialité NSI (document pédagogique), éduscol. Consulté le 7 novembre 2026.
  3. Épreuves bac et concours général — Spécialité NSI 2024, éduscol STI. Consulté le 7 novembre 2026.
  4. Bulletin officiel n° 31 du 21 août 2025 — Épreuve terminale NSI (session 2026), Bulletin officiel (BO). Consulté le 7 novembre 2026.
  5. Langage de requête, Wikipédia. 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.

Signaler une erreur sur cette page

Je suis en…

Primaire

  • CP Bientôt
  • CE1 Bientôt
  • CE2 Bientôt
  • CM1 Bientôt
  • CM2 Bientôt

Collège

Lycée

Supérieur

  • BTS Bientôt
  • BUT Bientôt
  • Licence Bientôt
  • Prépas Bientôt

Sur cette page