NSI · Terminale

Bases de données : le langage SQL

Apprenez le langage SQL (Structured Query Language) pour créer, interroger, joindre, modifier et administrer des tables de données.

Le langage SQL

Introduction

Après avoir étudié la théorie du modèle relationnel, nous allons apprendre à interroger et manipuler ces bases de données à l'aide d'un langage standardisé : le SQL (*Structured Query Language*).

La plupart des SGBD du marché (Oracle, MySQL, Microsoft SQL Server, PostgreSQL, SQLite, MariaDB...) implémentent ce langage. Nous travaillerons principalement avec SQLite, une version légère de SGBD intégrable directement sans serveur (par exemple à l'aide de l'outil *DB Browser for SQLite*).

Création de table : CREATE TABLE

Pour créer une table en SQL, on utilise la commande CREATE TABLE.

SQL
1
2
3
4
5
6
7
8
9
CREATE TABLE LIVRES
(
id INT,
titre TEXT,
auteur TEXT,
ann_publi INT,
note INT,
PRIMARY KEY (id)
);

Explications :

  • CREATE TABLE LIVRES crée une table nommée LIVRES.
  • Chaque ligne définit un attribut avec son nom et son type (INT pour entier, TEXT pour du texte).
  • PRIMARY KEY (id) spécifie que l'attribut id sert de clé primaire unique. Le SGBD empêchera l'insertion de lignes ayant le même id.

Insertion de données : INSERT INTO

Pour ajouter des enregistrements dans une table, on utilise la clause INSERT INTO.

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
INSERT INTO LIVRES (id, titre, auteur, ann_publi, note)
VALUES
(1, '1984', 'Orwell', 1949, 10),
(2, 'Dune', 'Herbert', 1965, 8),
(3, 'Fondation', 'Asimov', 1951, 9),
(4, 'Le meilleur des mondes', 'Huxley', 1931, 7),
(5, 'Fahrenheit 451', 'Bradbury', 1953, 7),
(6, 'Ubik', 'K.Dick', 1969, 9),
(7, 'Chroniques martiennes', 'Bradbury', 1950, 8),
(8, 'La nuit des temps', 'Barjavel', 1968, 7),
(9, 'Blade Runner', 'K.Dick', 1968, 8),
(10, 'Les Robots', 'Asimov', 1950, 9),
(11, 'La Planète des singes', 'Boulle', 1963, 8),
(12, 'Ravage', 'Barjavel', 1943, 8),
(13, 'Le Maître du Haut Château', 'K.Dick', 1962, 8),
(14, 'Le monde des Ā', 'Van Vogt', 1945, 7),
(15, 'La Fin de l’éternité', 'Asimov', 1955, 8),
(16, 'De la Terre à la Lune', 'Verne', 1865, 10);

Requêtes d'interrogation : SELECT

La structure de base d'une requête d'interrogation en SQL est composée des clauses SELECT et FROM.

SQL
1
2
SELECT id, titre, auteur
FROM LIVRES;
  • SELECT liste les colonnes à afficher.
  • FROM indique la table source.

Pour afficher tous les attributs d'une table sans les nommer individuellement, on utilise le caractère joker * :

SQL
1
2
SELECT *
FROM LIVRES;

Filtrer les résultats : la clause WHERE

Pour sélectionner uniquement certaines lignes respectant un critère donné, on ajoute la clause WHERE suivie d'une condition logique.

Les opérateurs de comparaison classiques sont : =, !=, >, >=, <, <=.

SQL
1
2
3
SELECT titre, ann_publi
FROM LIVRES
WHERE auteur = 'Asimov';

On peut aussi filtrer sur une liste de valeurs à l'aide du mot-clé IN :

SQL
1
2
3
SELECT titre
FROM LIVRES
WHERE ann_publi IN (1950, 1968, 1943);

Combinaisons logiques : AND et OR

SQL
1
2
3
SELECT titre, ann_publi
FROM LIVRES
WHERE auteur = 'Asimov' AND ann_publi > 1953;

Recherche partielle : LIKE

Le mot-clé LIKE permet de rechercher des motifs textuels. Le caractère % sert de joker (remplace n'importe quelle suite de caractères).

SQL
1
2
3
SELECT titre
FROM LIVRES
WHERE titre LIKE '%nuit%';

*Cette requête renvoie les livres contenant le mot "nuit" dans leur titre.*

Trier les résultats : ORDER BY

Pour trier les données, on ajoute la clause ORDER BY suivie du nom de l'attribut de tri. Le tri est ascendant par défaut, mais on peut forcer un tri descendant à l'aide de DESC.

SQL
1
2
3
4
SELECT titre
FROM LIVRES
WHERE auteur = 'K.Dick'
ORDER BY ann_publi DESC;

Éliminer les doublons : DISTINCT

Pour n'afficher qu'une seule fois chaque valeur présente dans une colonne, on insère la clause DISTINCT juste après le SELECT.

SQL
1
2
SELECT DISTINCT auteur
FROM LIVRES;

Les Jointures : INNER JOIN

Lorsque les données sont séparées sur plusieurs tables pour éviter la redondance, on utilise des jointures pour les recombiner.

Créons nos deux tables reliées par une clé étrangère :

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE TABLE AUTEURS (
id INT,
nom TEXT,
prenom TEXT,
ann_naissance INT,
langue_ecriture TEXT,
PRIMARY KEY (id)
);
CREATE TABLE LIVRES (
id INT,
titre TEXT,
id_auteur INT,
ann_publi INT,
note INT,
PRIMARY KEY (id),
FOREIGN KEY (id_auteur) REFERENCES AUTEURS(id)
);

Après avoir inséré les données correspondantes dans les deux tables, on peut effectuer une jointure interne à l'aide de la clause INNER JOIN ... ON ....

SQL
1
2
3
SELECT LIVRES.titre, AUTEURS.nom, AUTEURS.prenom
FROM LIVRES
INNER JOIN AUTEURS ON LIVRES.id_auteur = AUTEURS.id;
  • FROM LIVRES désigne la table de gauche.
  • INNER JOIN AUTEURS raccorde la table de droite AUTEURS.
  • ON LIVRES.id_auteur = AUTEURS.id spécifie la condition de jointure (égalité entre la clé étrangère de la table livre et la clé primaire de la table auteur).

Si un nom d'attribut est présent dans les deux tables (comme id), il est obligatoire de le préfixer avec le nom de sa table d'origine (ex. AUTEURS.id ou LIVRES.id) pour éviter les conflits d'ambiguïté.

On peut combiner les jointures avec des filtres WHERE ou des tris ORDER BY :

SQL
1
2
3
4
5
SELECT titre, nom, prenom
FROM LIVRES
INNER JOIN AUTEURS ON LIVRES.id_auteur = AUTEURS.id
WHERE ann_publi > 1950
ORDER BY nom;

Requêtes de mise à jour et suppression

Modification d'enregistrements : UPDATE

La clause UPDATE permet de modifier des enregistrements existants. Il est fondamental de l'associer à une clause WHERE sous peine de modifier l'ensemble de la table !

SQL
1
2
3
UPDATE LIVRES
SET note = 7
WHERE titre = 'Hypérion';

Suppression d'enregistrements : DELETE

La commande DELETE FROM supprime définitivement des lignes de la table. La clause WHERE est indispensable pour cibler les lignes à retirer.

SQL
1
2
DELETE FROM LIVRES
WHERE titre = 'Hypérion';

Suppression d'une table : DROP TABLE

Pour détruire définitivement une table et son contenu de la base de données :

SQL
1
DROP TABLE LIVRES;

Fonctions d'agrégation : COUNT()

La fonction COUNT() permet de comptabiliser le nombre de lignes d'un résultat.

  • Compter toutes les lignes d'une table :
SQL
1
SELECT COUNT(*) FROM LIVRES;
  • Compter en filtrant avec WHERE :
SQL
1
SELECT COUNT(*) FROM LIVRES WHERE note >= 9;
  • Compter le nombre de valeurs distinctes non nulles d'une colonne :
SQL
1
SELECT COUNT(DISTINCT auteur) FROM LIVRES;

Fiche de Révision

OpérationSyntaxe SQL type
CréationCREATE TABLE NomTable (attribut1 TYPE, ..., PRIMARY KEY (attr1));
InsertionINSERT INTO NomTable (attributs) VALUES (valeurs);
SélectionSELECT attributs FROM NomTable WHERE condition ORDER BY attr;
JointureSELECT * FROM T1 INNER JOIN T2 ON T1.cle_etrangere = T2.cle_primaire;
ModificationUPDATE NomTable SET attribut = nouvelle_valeur WHERE condition;
Suppression ligneDELETE FROM NomTable WHERE condition;
ComptageSELECT COUNT(*) FROM NomTable WHERE condition;

Exercices du Baccalauréat à réviser

Pour vous préparer efficacement aux épreuves écrites de spécialité NSI, voici la liste complète des sujets officiels classés par année, accompagnés de leurs hyperliens directs vers les PDF de révision.

Session 2025 & Sujets Récents

Session 2022

Session 2021

Avez-vous compris ce chapitre ?

Cochez-le pour l'enregistrer dans votre progression d'apprentissage.