Aller au contenu principal

Informatique · Terminale · 5 min de lecture

Interroger une base de données avec SQL

Identifier les composants d'une requête ; construire des requêtes d'interrogation avec SELECT (colonnes, DISTINCT, fonctions d'agrégation COUNT, SUM, AVG, MIN, MAX), FROM, WHERE (conditions combinées par AND, OR, NOT), ORDER BY (ASC, DESC) et JOIN … ON pour relier deux tables par une clé étrangère.

Chapitre du programme : Numérique et sciences informatiques (spécialité)

Bloc 1 sur 7 · Comprendre

Comprendre : SELECT, FROM, WHERE

Une base de données relationnelle range ses données en tables. Toute la leçon utilise ces deux tables :

Table eleves (clé primaire : prenom ; classe est une clé étrangère vers classes)

Tableau : prenom, classe, note, age
prenomclassenoteage
AliceA1416
BilalB917
ChloéA1716
DavidC1218
EmmaB1516
FarahC817

Table classes (clé primaire : nom)

Tableau : nom, salle
nomsalle
AB12
BC04
CB07

Une requête d'interrogation se lit en trois clauses :

SELECT prenom, note
FROM eleves
WHERE note >= 12;
  • FROM eleves : la table interrogée ;
  • WHERE note >= 12 : la condition que doit vérifier chaque ligne gardée ;
  • SELECT prenom, note : les colonnes affichées pour les lignes gardées.

Résultat :

Tableau : prenom, note
prenomnote
Alice14
Chloé17
David12
Emma15

Bloc 2 sur 7 · Approfondir

Approfondir : conditions, tri, agrégats, jointure

Conditions combinées. AND exige les deux conditions, OR une seule, NOT inverse. Comme en Python, AND est prioritaire sur OR :

SELECT prenom FROM eleves WHERE classe = 'A' OR note < 10 AND age = 17;

se lit classe = 'A' OR (note < 10 AND age = 17) et renvoie Alice, Bilal, Chloé, Farah. Avec des parenthèses, le sens change :

SELECT prenom FROM eleves WHERE (classe = 'A' OR note < 10) AND age = 17;

renvoie seulement Bilal et Farah.

Trier et dédoublonner. ORDER BY note DESC trie par note décroissante (ASC, croissant, est l'ordre par défaut) ; SELECT DISTINCT age ne garde qu'un exemplaire de chaque valeur :

SELECT prenom, note FROM eleves WHERE age = 16 ORDER BY note DESC;

renvoie Chloé (17), Emma (15), Alice (14) ; et SELECT DISTINCT age FROM eleves ORDER BY age; renvoie 16, 17, 18.

Fonctions d'agrégation. COUNT, SUM, AVG, MIN, MAX s'appliquent aux lignes gardées par WHERE et renvoient une seule ligne :

SELECT COUNT(prenom), AVG(note), MAX(note) FROM eleves WHERE classe = 'B';

renvoie 2, 12.0 et 15 : deux élèves en classe B, notes 9 et 15.

Jointure. Pour associer chaque élève à la salle de sa classe, on relie les deux tables par la clé étrangère :

SELECT eleves.prenom, classes.salle
FROM eleves JOIN classes ON eleves.classe = classes.nom
WHERE note > 13;
Tableau : prenom, salle
prenomsalle
AliceB12
ChloéB12
EmmaC04

Bloc 3 sur 7 · Exemple

Exemple guidé : prévoir le résultat d'une requête

Énoncé. Combien de lignes renvoie cette requête, et lesquelles ?

SELECT prenom FROM eleves WHERE NOT classe = 'C' AND age >= 17;

Méthode : tester la condition ligne par ligne. NOT s'applique à classe = 'C' seulement, puis AND combine.

Tableau : prenom, NOT classe = 'C', age >= 17, gardée ?
prenomNOT classe = 'C'age >= 17gardée ?
Alicevraifauxnon
Bilalvraivraioui
Chloévraifauxnon
Davidfauxvrainon
Emmavraifauxnon
Farahfauxvrainon

La requête renvoie une seule ligne : Bilal.

Bloc 4 sur 7 · Visualiser

Voir : l'ordre d'évaluation d'une requête

On écrit SELECT en premier, mais le système procède dans cet ordre :

Tableau : Étape, Clause, Effet
ÉtapeClauseEffet
1FROM … JOIN … ONrassemble les lignes des tables, reliées par la condition de jointure
2WHEREne garde que les lignes qui vérifient la condition
3SELECTcalcule les colonnes demandées, ou les agrégats sur les lignes gardées
4DISTINCTsupprime les doublons
5ORDER BYtrie le résultat

Continuez sur votre lancée

Vous avez découvert l’essentiel et un exemple. Retrouvez la suite du cours et les points à retenir, puis passez à l’entraînement guidé dans votre compte.

  • Les formules et les repères à retenir
  • Les erreurs fréquentes expliquées
  • Un exercice avec des aides et sa correction

L’accès gratuit comprend les cours et exercices de votre niveau choisi.

Sources

  • BO spécial n°8 du 25 juillet 2019 — programme de spécialité numérique et sciences informatiques de terminale, rubrique « Bases de données »
  • ISO/IEC 9075, Information technology — Database languages — SQL
  • Documentation de SQLite — SQL As Understood By SQLite, « SELECT » (https://www.sqlite.org/lang_select.html)

Vous pensez avoir trouvé une erreur dans cette leçon ? Signalez-la par e-mail.

Explorer les autres cours

Accès rapide