SQL
I. Introduction aux bases de données
Qu'est-ce qu'une base de données ?
Une base de données est un ensemble structuré d'informations stockées de façon à pouvoir être facilement consultées, modifiées, recherchées ou organisées.
Exemples :
- Carnet d'adresses
- Catalogue de livres
- Informations d'élèves dans un lycée
Objectifs :
- Stocker de l’information durablement
- Pouvoir interroger et retrouver efficacement les données
- Pouvoir les mettre à jour sans erreur
II. Le modèle relationnel
C’est le modèle le plus courant, utilisé dans la majorité des bases de données.
1. Table (= relation)
Une table correspond à un ensemble de lignes (appelées tuples) et de colonnes (appelées attributs).
Exemple de table Eleves :
| id_eleve | nom | prenom | age |
| 1 | Dupont | Marie | 17 |
| 2 | Martin | Lucas | 18 |
2. Attributs
Ce sont les colonnes de la table. Chaque attribut a un nom et un type (texte, entier, date, etc.)
3. Tuple (ou enregistrement)
Chaque ligne correspond à un enregistrement de la table.
III. Clés primaires et étrangères
Clé primaire (PRIMARY KEY)
C’est un attribut (ou un ensemble d’attributs) qui permet d’identifier de façon unique chaque ligne de la table.
Exemple : id_eleve est une clé primaire dans la table Eleves.
Clé étrangère (FOREIGN KEY)
C’est un attribut qui fait référence à une clé primaire d’une autre table.
Exemple :
- Table
Elevesa un champid_classe
- Table
Classesa une clé primaireid_classe→ On peut relier chaque élève à sa classe via une clé étrangère
IV. Introduction au langage SQL
Le SQL (Structured Query Language) est un langage standardisé qui permet d’interagir avec une base de données relationnelle.
On l’utilise pour :
- Créer et modifier des tables
- Ajouter, supprimer, modifier des données
- Rechercher des données selon des critères
V. Créer une table en SQL
CREATE TABLE Eleves (
id_eleve INTEGER PRIMARY KEY,
nom TEXT,
prenom TEXT,
age INTEGER,
id_classe INTEGER,
FOREIGN KEY(id_classe) REFERENCES Classes(id_classe)
);Explication :
id_eleve: clé primaire
id_classe: clé étrangère qui fait référence à la tableClasses
VI. Insérer des données
INSERT INTO Eleves (id_eleve, nom, prenom, age, id_classe)
VALUES (1, 'Dupont', 'Marie', 17, 101);On ajoute ici une élève dans la table Eleves.
VII. Rechercher des données : SELECT
SELECT * FROM Eleves;→ Affiche toutes les colonnes et lignes.
SELECT nom, prenom FROM Eleves;→ Affiche uniquement les noms et prénoms.
SELECT * FROM Eleves WHERE age >= 18;→ Affiche les élèves de 18 ans et plus.
VIII. Modifier ou supprimer des données
Modifier :
UPDATE Eleves
SET age = 18
WHERE id_eleve = 1;→ Met à jour l’âge de l’élève dont l’id est 1.
Supprimer :
DELETE FROM Eleves
WHERE id_eleve = 1;→ Supprime l’élève avec l’id 1.
IX. Trier, limiter et filtrer
Trier (ORDER BY)
SELECT * FROM Eleves ORDER BY nom ASC;→ Trie les élèves par nom (ordre alphabétique)
Limiter (LIMIT)
SELECT * FROM Eleves LIMIT 5;→ Affiche les 5 premiers résultats.
X. Requêtes avec jointures
Pourquoi faire une jointure ?
Pour réunir des informations venant de plusieurs tables liées par une relation (clé étrangère ↔ clé primaire).
Exemple :
SELECT prenom, nom, nom_classe
FROM Eleves
JOIN Classes ON Eleves.id_classe = Classes.id_classe;→ Cette requête affiche le prénom, le nom de l’élève, et le nom de sa classe.
XI. Fonctions d’agrégation
SQL propose des fonctions pour calculer des statistiques.
| Fonction | Rôle |
COUNT() | Compte le nombre de lignes |
AVG() | Moyenne |
SUM() | Somme |
MIN() | Minimum |
MAX() | Maximum |
Exemple :
SELECT COUNT(*) FROM Eleves WHERE age >= 18;→ Nombre d’élèves majeurs.
SELECT AVG(age) FROM Eleves;→ Âge moyen des élèves.
XII. Contraintes importantes
| Contrainte | Description |
PRIMARY KEY | identifie de façon unique chaque ligne |
FOREIGN KEY | relie une table à une autre |
NOT NULL | interdit que la valeur soit vide |
UNIQUE | impose que chaque valeur soit différente |
DEFAULT | donne une valeur par défaut |
Exemple :
age INTEGER NOT NULL DEFAULT 16→ Impossible de créer un élève sans âge, et s’il n’est pas précisé, il sera de 16 ans par défaut.
XIII. Cas typique au bac : base à deux tables
Tables :
Eleves(id_eleve, nom, prenom, age, id_classe)
Classes(id_classe, nom_classe)
Requêtes classiques à savoir faire :
- Afficher les élèves d’une classe spécifique
- Afficher le nombre d’élèves par classe
- Rechercher les élèves majeurs
- Requêtes avec jointure entre
ElevesetClasses
XIV. Conseils pour réussir les exercices au bac
- Bien comprendre la structure des tables
- Toujours identifier la clé primaire et les clés étrangères
- Savoir écrire une requête
SELECT ... FROM ... WHERE
- Savoir faire une jointure simple
- Lire attentivement l’énoncé pour repérer les conditions