NSI · Terminale · Bases de données
Le langage SQL
Dire ce qu’on veut, pas comment.

En bref
SQL est un langage déclaratif : on décrit le résultat souhaité, et le SGBD choisit lui-même comment l’obtenir.
SQL est un langage déclaratif : on décrit le résultat souhaité, et le SGBD choisit lui-même comment l’obtenir. C’est ce qui le distingue de Python.
Les deux familles
| Famille | Ses commandes |
|---|---|
| Définition des données | CREATE TABLE, ALTER TABLE, DROP TABLE |
| Manipulation des données | SELECT, INSERT, UPDATE, DELETE |
L’interrogation
SELECT nom, moyenne FROM eleve WHERE moyenne >= 15 ORDER BY moyenne DESC
| Clause | Son rôle |
|---|---|
| SELECT | Choisit les colonnes — l’étoile les prend toutes, à éviter en production |
| FROM | Désigne la ou les tables |
| WHERE | Filtre les lignes |
| ORDER BY | Trie, en ASC (défaut) ou DESC |
| DISTINCT, LIMIT | Élimine les doublons ; borne le nombre de résultats |
Dans WHERE : les comparaisons, AND, OR, NOT, BETWEEN, IN, LIKE (avec le joker pour-cent), IS NULL.
Écrire dans la base
| Commande | Sa forme |
|---|---|
| INSERT | INSERT INTO eleve (nom, classe_id) VALUES ('Dupont', 3) |
| UPDATE | UPDATE eleve SET moyenne = 14 WHERE id = 12 |
| DELETE | DELETE FROM eleve WHERE id = 12 |
UPDATE et DELETE sans WHERE s’appliquent à toutes les lignes de la table. C’est l’erreur la plus coûteuse du langage.
Les jointures
SELECT eleve.nom, classe.niveau FROM eleve JOIN classe ON eleve.classe_id = classe.id
| Jointure | Ce qu’elle garde |
|---|---|
| JOIN (INNER) | Seulement les lignes ayant une correspondance des deux côtés |
| LEFT JOIN | Toutes les lignes de gauche, complétées par NULL — c’est ce qu’il faut pour lister les élèves sans classe |
Oublier la condition ON produit un produit cartésien : chaque ligne de la première table combinée à chaque ligne de la seconde.
Les agrégats
COUNT, SUM, AVG, MIN, MAX résument un ensemble de lignes en une valeur. Avec GROUP BY, le résumé se fait par groupe :
SELECT classe_id, AVG(moyenne) FROM eleve GROUP BY classe_id
| Clause | Sur quoi elle porte | Quand elle agit |
|---|---|---|
| WHERE | Les lignes | Avant le regroupement |
| HAVING | Les groupes | Après le regroupement |
L’injection SQL
Construire une requête en concaténant une saisie utilisateur permet à un attaquant d’en modifier le sens.
La parade n’est ni le filtrage des apostrophes ni la vérification côté navigateur, mais les requêtes paramétrées — où la valeur ne peut jamais être interprétée comme du code.
Ordre logique d’exécution : FROM, puis WHERE, puis GROUP BY, puis HAVING, puis SELECT, puis ORDER BY. Il explique à lui seul pourquoi HAVING ne peut pas remplacer WHERE.
Teste-toi
6 questions pour vérifier
Touche une réponse : la correction s’affiche tout de suite.
1.SQL est un langage…
2.Quelle est la différence entre WHERE et HAVING ?
3.Que fait un LEFT JOIN de plus qu’un JOIN ?
4.Que produit une jointure dont on a oublié la condition ON ?
5.Que se passe-t-il si l’on écrit un DELETE sans clause WHERE ?
6.Quelle est la parade efficace contre l’injection SQL ?
0 / 6 questions
Dans l’app, ce chapitre a son quiz complet, chronométré, et tes erreurs reviennent au bon moment pour ne plus les refaire.

La fiche de révision, sur une page
Tout « Le langage SQL » sur une seule page A4 illustrée : l’essentiel, les pièges et un mini-test. Elle se débloque dans l’app avec des gemmes — et ton compte gratuit en offre assez pour tes trois premières fiches.

