Requêtes SQL sur une table : création, sélection, tri et mise à jour, cours, méthodes et exercices corrigés pour les ECS, ECT et ECG
Vocabulaire des bases relationnelles et rôle des clés, création d'une table, requêtes de sélection sur une table (SELECT, WHERE, opérateurs, DISTINCT, ORDER BY), insertion, modification et suppression de lignes, exécution sous SQLite et depuis Python, avec des cas tirés des sujets du CNAEM, de la BCE, d'ECRICOME et des concours scientifiques.
- 16méthodes
- 48exercices corrigés
- 8problèmes
- 22pièges
- 36figures
Une requête SQL sur une table répond à trois questions, dans cet ordre d'écriture : quoi (les colonnes, après SELECT), dans quelle table (après FROM), à quelle condition (après WHERE) ; on ajoute ORDER BY pour trier (DESC pour l'ordre décroissant) et DISTINCT pour supprimer les doublons. Exemple : SELECT nom, prix FROM article WHERE prix >= 100 ORDER BY prix DESC; affiche le nom et le prix des articles d'au moins 100 DH, du plus cher au moins cher. Pour modifier la table, INSERT INTO ajoute des lignes, UPDATE ... SET ... WHERE les modifie et DELETE FROM ... WHERE les supprime ; sans WHERE, ces deux derniers ordres touchent toutes les lignes. Quatre règles évitent la plupart des erreurs de copie : une chaîne entre apostrophes ('Fes'), une case vide se teste par IS NULL et jamais par = NULL, une division entre entiers est entière sous SQLite (écrire 1.0 * devant), une date s'écrit 'AAAA-MM-JJ'. Ce chapitre d'informatique de deuxième année couvre le SQL sur une table de l'ECS2 et de l'ECT2 au Maroc (programme fondé sur SQLite, avec IN, BETWEEN, LIKE, la limitation d'affichage en ECS2 et les fonctions de date strftime et julianday en ECT2) et de l'ECG (mathématiques appliquées) et de l'ECT en France. Il prépare aux questions SQL du CNAEM (épreuve « Gestion, management et informatique » de la filière ECT), des sujets de mathématiques de la BCE et d'ECRICOME, où les rapports de jury disent que ces questions rapportent beaucoup de points. La page propose un cours avec des schémas, des méthodes avec la requête type à écrire sur la copie, des exercices corrigés dont chaque requête a été exécutée sous SQLite, et des sujets réels du CNAEM, de la BCE, d'ECRICOME et du CNC corrigés pas à pas.
Ce que tu sauras faire
Une base de données ne sert que si l'on sait lui poser des questions et la tenir à jour. Ce chapitre apprend à le faire sur une seule table, avec le langage SQL et le logiciel SQLite. À la fin, tu dois savoir :
- lire une table et son schéma, et dire si une colonne peut servir de clé primaire ;
- créer une table (
CREATE TABLE; en ECS2, à savoir lire, non exigible) et la remplir (INSERT INTO) ; - extraire des colonnes et des lignes (
SELECT ... FROM ... WHERE), avec une condition juste ; - traiter une valeur manquante, supprimer les doublons, trier, calculer une colonne, comparer des dates ;
- modifier et supprimer des lignes (
UPDATE,DELETE) sans jamais oublier la condition ; - relire une requête et prévoir à la main ce qu'elle affiche.
L'essentiel : Les ordres du chapitre Extrait gratuit
CREATE TABLE produit (
ref_produit TEXT PRIMARY KEY NOT NULL,
designation TEXT NOT NULL,
categorie TEXT,
prix INTEGER,
poids_g INTEGER,
stock INTEGER,
seuil INTEGER,
date_ajout TEXT
);
INSERT INTO produit
VALUES ('P01', 'Miel de thym', 'Miel',
120, 500, 14, 10, '2024-03-12');
INSERT INTO produit (ref_produit, designation, stock)
VALUES ('P11', 'Amlou aux amandes', 40);
SELECT designation, prix
FROM produit
WHERE prix >= 100 AND prix <= 200
ORDER BY prix DESC, designation;
SELECT DISTINCT categorie
FROM produit;
UPDATE produit
SET stock = stock - 3
WHERE ref_produit = 'P01';
DELETE FROM produit
WHERE stock = 0;
Ordre d'écriture : SELECT, FROM, WHERE, ORDER BY. Ordre d'évaluation : FROM, WHERE, SELECT, DISTINCT, ORDER BY.
Une méthode du chapitre Extrait gratuit
SELECT ... FROM ... WHEREL'énoncé demande d'« afficher », de « donner la liste », d'« écrire la requête qui renvoie » ; ou, en sens inverse, de dire ce qu'affiche une requête donnée.
SELECT : les colonnes à afficher (projection) ; FROM : la table ; WHERE : la condition sur les lignes (sélection). On décrit l'effet d'une requête avec le verbe « afficher ».
- Souligne ce qu'on veut voir : ce sont les colonnes du
SELECT(*pour toutes). - Repère la table qui contient ces colonnes :
FROM. - Traduis chaque condition en comparaison, puis relie-les (
AND,OR). - Écris les trois clauses dans l'ordre, une par ligne.
- En sens inverse : lis la condition, puis les colonnes, et écris « La requête affiche [colonnes] des [lignes] qui [condition]. »
« Requête qui affiche la désignation et le prix des miels : »
SELECT designation, prix
FROM produit
WHERE categorie = 'Miel';
« Donner la désignation et le stock des produits de la catégorie Fromage. »
SELECT designation, stock
FROM produit
WHERE categorie = 'Fromage';
SQLite répond :
| designation | stock |
|---|---|
| Fromage de chèvre | 30 |
| Fromage de chèvre affiné | 0 |
Sens inverse : SELECT ref_produit FROM produit WHERE stock = 0; « affiche la référence des produits dont le stock est nul ».
- Écrire une phrase au lieu d'une requête, ou un programme Python.
- Oublier une colonne demandée, ou en ajouter une.
- Décrire une requête par « sélectionne » sans dire ce qui est affiché.
Exercices 5, 6, 13 et 20 ; problèmes 2, 3 et 5.
Un exercice corrigé Extrait gratuit
La bibliothèque attenante à une mosquée de Fès prête des livres aux étudiants ; sa table livre :
| cote | titre | domaine | langue | annee | pages | pret |
|---|---|---|---|---|---|---|
| L01 | Riyad as-Salihin | hadith | arabe | 2010 | 620 | 1 |
| L02 | Tafsir Ibn Kathir | tafsir | arabe | 2005 | 2400 | 0 |
| L03 | La Muqaddima | histoire | francais | 2012 | 1100 | 1 |
| L04 | Initiation au fiqh | fiqh | francais | 2019 | 240 | 1 |
| L05 | Grammaire arabe | langue | arabe | 2016 | 310 | 1 |
| L06 | Histoire du Maroc | histoire | francais | 2021 | 450 | 0 |
| L07 | Sira du Prophete | sira | arabe | 2018 | 520 | 1 |
| L08 | Usul al-fiqh | fiqh | arabe | 2020 | 380 | 1 |
La colonne pret vaut 1 si le livre peut être emprunté, 0 s'il se consulte sur place. Écrire les requêtes qui affichent :
- les titres et les années de tous les livres ;
- toute la ligne du livre de cote L05 ;
- les titres des livres en arabe ;
- les titres des livres qui ne sont pas en arabe ;
- les titres des livres de plus de 500 pages qu'on peut emprunter ;
- les titres des livres d'histoire ou de sira ;
- les domaines présents, sans répétition ;
- les titres, du plus récent au plus ancien ;
- la langue et le titre, par langue, puis par titre ;
- les titres des livres de fiqh parus en 2019 ou après, du plus long au plus court.
- Méthode 4 : pour chacune, quoi, où, à quelle condition, dans quel ordre.
- Méthode 5 : « histoire ou sira » s'écrit avec
ORet deux comparaisons complètes.
SELECT titre, annee
FROM livre;
SQLite répond :
| titre | annee |
|---|---|
| Riyad as-Salihin | 2010 |
| Tafsir Ibn Kathir | 2005 |
| La Muqaddima | 2012 |
| Initiation au fiqh | 2019 |
| Grammaire arabe | 2016 |
| Histoire du Maroc | 2021 |
| Sira du Prophete | 2018 |
| Usul al-fiqh | 2020 |
SELECT *
FROM livre
WHERE cote = 'L05';
SQLite répond :
| cote | titre | domaine | langue | annee | pages | pret |
|---|---|---|---|---|---|---|
| L05 | Grammaire arabe | langue | arabe | 2016 | 310 | 1 |
SELECT titre
FROM livre
WHERE langue = 'arabe';
SQLite répond :
| titre |
|---|
| Riyad as-Salihin |
| Tafsir Ibn Kathir |
| Grammaire arabe |
| Sira du Prophete |
| Usul al-fiqh |
SELECT titre
FROM livre
WHERE langue <> 'arabe';
SQLite répond :
| titre |
|---|
| La Muqaddima |
| Initiation au fiqh |
| Histoire du Maroc |
SELECT titre
FROM livre
WHERE pages > 500 AND pret = 1;
SQLite répond :
| titre |
|---|
| Riyad as-Salihin |
| La Muqaddima |
| Sira du Prophete |
SELECT titre
FROM livre
WHERE domaine = 'histoire' OR domaine = 'sira';
SQLite répond :
| titre |
|---|
| La Muqaddima |
| Histoire du Maroc |
| Sira du Prophete |
SELECT DISTINCT domaine
FROM livre;
SQLite répond :
| domaine |
|---|
| hadith |
| tafsir |
| histoire |
| fiqh |
| langue |
| sira |
SELECT titre
FROM livre
ORDER BY annee DESC;
SQLite répond :
| titre |
|---|
| Histoire du Maroc |
| Usul al-fiqh |
| Initiation au fiqh |
| Sira du Prophete |
| Grammaire arabe |
| La Muqaddima |
| Riyad as-Salihin |
| Tafsir Ibn Kathir |
SELECT langue, titre
FROM livre
ORDER BY langue, titre;
SQLite répond :
| langue | titre |
|---|---|
| arabe | Grammaire arabe |
| arabe | Riyad as-Salihin |
| arabe | Sira du Prophete |
| arabe | Tafsir Ibn Kathir |
| arabe | Usul al-fiqh |
| francais | Histoire du Maroc |
| francais | Initiation au fiqh |
| francais | La Muqaddima |
SELECT titre
FROM livre
WHERE domaine = 'fiqh' AND annee >= 2019
ORDER BY pages DESC;
SQLite répond :
| titre |
|---|
| Usul al-fiqh |
| Initiation au fiqh |
Interprétation : dix demandes, une seule structure : SELECT, FROM, WHERE, ORDER BY, chacune remplie d'après la phrase.
Lire la demande en quatre questions (quoi, où, à quelle condition, dans quel ordre) donne la requête clause par clause. Voir les méthodes 4, 5, 6 et 7.
Le cours détaillé, toute la fiche « L'essentiel », 16 méthodes, 22 pièges corrigés, la carte mentale, 48 exercices corrigés, 8 problèmes de concours, les fiches à mémoriser et l'assistant qui répond à tes questions. Ce chapitre est offert : il s’ouvre en entier avec un compte d’essai gratuit.
Ouvrir l'essai gratuitUne question ? WhatsAppPlan du cours
- 1. Le modèle relationnel en bref
- 2. SQLite et la création d'une table
- 3. Remplir une table :
INSERT INTO - 4. Interroger une table : projection et sélection
- 5. Écrire une condition
- 5.1 Les comparaisons
- 5.2
AND,OR,NOTet les parenthèses - 5.3 Encadrer une valeur
- 5.4
IN,BETWEENetLIKE
- 6. La valeur manquante
NULL - 7. Supprimer les doublons et trier
- 7.1
DISTINCT - 7.2
ORDER BY - 7.3 La limitation d'affichage :
LIMITetOFFSET
- 7.1
- 8. Colonnes calculées et renommage
- 9. Les dates
- 9.1 Les fonctions de date de SQLite
- 10. Modifier des lignes :
UPDATE - 11. Supprimer des lignes :
DELETE - 12. Écrire, relire et exécuter une requête
Les méthodes du chapitre
Chaque méthode est une fiche : quand l'utiliser, le rappel de cours, les étapes, la rédaction attendue sur la copie, un exemple traité, les erreurs à éviter.
- Lire une table et justifier une clé primaire
- Écrire un
CREATE TABLEsimple - Insérer des lignes avec
INSERT INTO - Traduire une demande en
SELECT ... FROM ... WHERE - Écrire une condition
- Supprimer les doublons avec
DISTINCT - Trier avec
ORDER BY - Calculer une colonne sans division entière
- Comparer et trier des dates en texte
- Modifier des lignes avec
UPDATE - Supprimer des lignes après avoir testé la condition
- Exécuter une requête à la main et la vérifier
- Traiter une partie SQL d'un sujet de concours
- Utiliser
IN,BETWEENetLIKE - Limiter l'affichage avec
LIMITetOFFSET - Extraire et calculer sur une date avec SQLite
Les exercices corrigés
Chaque exercice a ses indications, sa correction rédigée et ce qu'il faut en retenir.
Application directe (18)
- Le vocabulaire d'une table : le registre des adhérents d'une association
- Une table de tirages : clé, création et requête
- Créer la table des bénévoles d'une association
- Trois insertions dans la table des fournisseurs
- Projection, sélection, puis les deux : la bibliothèque du quartier
- Dire ce qu'affiche une requête : les chats du quartier
- Six conditions à écrire : le matériel d'un atelier de menuiserie
- AND, OR et parenthèses : prévoir avant d'exécuter
- Encadrer une valeur : les cartons d'emballage
- Le zoo : clé, types d'alimentation, espèces nombreuses
- Trier sur une puis deux colonnes : l'atelier de couture
- Les poissons du lac
- Le stock du miel vendu en ligne
- Supprimer une inscription en double
- Exécuter à la main quatre requêtes
- Prix TTC et prix au kilogramme : la division entière
- IN, BETWEEN et LIKE : les factures d'un grossiste
- Les plus grosses ventes : ORDER BY et LIMIT
Entraînement (23)
- Insérer une ligne donnée dans un autre ordre que la table
- Les points de fidélité d'une enseigne de grande distribution
- Le nouveau chat d'un propriétaire
- Dix demandes : les livres de la bibliothèque d'une mosquée
- Les pannes non réparées d'une conserverie
- Les ordinateurs et leur durée de vie
- Les ventes journalières des magasins d'une coopérative
- Quelle instruction échoue ?
- Corriger six requêtes d'une copie
- Deux colonnes modifiées dans le même UPDATE
- Trace d'une suite d'insertions, de modifications et de suppressions
- Des références rangées en texte : trier par numéro
- Recensement : clés primaires et codes sans répétition
- Du registre papier à la table : les dons en nature
- Le typage souple de SQLite
- « Jamais » n'est pas « différent »
- Les dons d'une année et d'un mois
- Classer des transporteurs d'après leurs avis
- Motifs : les candidats au bureau d'une association
- Les agences d'une banque participative
- Les trois meilleurs commerciaux et l'ex aequo
- Les congés du personnel
- Les clients inscrits en juin
Approfondissement (7)
- Deux modifications de prix dans le mauvais ordre
- La logique à trois valeurs
- Construire des lignes de test qui démasquent trois requêtes fausses
- Archiver avant de supprimer
- DISTINCT, tri et alias : ce que SQLite tolère
- Du cahier à la base : la réserve d'huile d'olive d'une coopérative
- Majorer les trajets qui passent par un tronçon
Les problèmes de concours
Des extraits de sujets réels, corrigés en entier, avec la durée conseillée et les méthodes mobilisées.
- Les actions sociales d'un fabricant de papier
- La refonte du système d'information d'un loueur de vélos
- Le stock d'un fabricant de foulards
- Les conteneurs du port de Tanger Med
- Les indemnités d'un fonds d'entraide
- Les documents d'un serveur de fichiers
- Les forêts du monde
- Les salariés qui peuvent devenir coordinateur
Questions fréquentes
Comment écrire une requête SQL avec SELECT, WHERE et ORDER BY ?
On écrit les clauses dans cet ordre : SELECT (les colonnes à afficher), FROM (la table), WHERE (la condition sur les lignes), ORDER BY (le tri). Exemple : SELECT titre, annee FROM livre WHERE langue = 'arabe' ORDER BY annee DESC;. Une requête n'a qu'un seul WHERE : deux conditions se relient par AND ou OR.
Comment trier par ordre décroissant en SQL ?
Avec ORDER BY colonne DESC. Sans DESC, le tri est croissant. Avec deux colonnes, ORDER BY prix DESC, nom trie par prix décroissant, puis par nom pour départager les prix égaux. Sans ORDER BY, aucun ordre n'est garanti.
Pourquoi WHERE colonne = NULL ne renvoie rien ?
NULL marque une valeur inconnue : une comparaison avec NULL n'est ni vraie ni fausse, et WHERE ne garde que les lignes où la condition est vraie. Pour trouver les cases vides, on écrit WHERE colonne IS NULL. Cette forme n'est nommée par aucun programme, mais elle est indispensable dès qu'une table a des valeurs manquantes.
Pourquoi une division donne 0 en SQL ?
Sous SQLite, la division de deux entiers est entière : 7 / 2 vaut 3 et 3 / 20 vaut 0. Pour garder les décimales, on rend l'un des termes réel : 1.0 * val / taille. C'est le piège du ratio dans le sujet Mines-Ponts 2025 et des proportions dans les sujets ECRICOME.
Quelle différence entre DELETE et DROP TABLE ?
DELETE FROM t WHERE ... supprime des lignes ; sans WHERE, il vide la table, qui reste créée. DROP TABLE t supprime la table elle-même. Avant un DELETE ou un UPDATE, on teste la même condition dans un SELECT pour voir les lignes visées.
Le SQL est-il au programme des ECS, ECT et ECG ?
Au Maroc, oui, dans la matière Informatique de l'ECS2 et de l'ECT2, avec le logiciel SQLite. En France, le SQL est au programme de l'ECT dès la première année et des mathématiques appliquées de l'ECG en deuxième année, pas des mathématiques approfondies ; DISTINCT et ORDER BY y sont non exigibles mais paraissent dans les sujets.
Comment réussir les questions SQL du CNAEM, de la BCE et d'ECRICOME ?
Lire le schéma de la table et recopier les noms de colonnes lettre par lettre ; écrire une requête par question, une clause par ligne, mots-clés en majuscules ; mettre les chaînes entre apostrophes ; signaler sur la copie une coquille de l'énoncé. Ces questions sont rapides et rapportent beaucoup de points : ne les laisse pas pour la fin.
Comment y accéder
Ce chapitre fait partie des chapitres offerts : il s'ouvre en entier avec un compte d'essai gratuit. Créer un compte d'essai ou se connecter. Pour l'accès complet, les tarifs ou une question, écris-nous sur WhatsApp.