🗄 Chapitre : Le langage SQL
1️⃣ Le langage SQL
SQL (Structured Query Language) est un langage standardisé permettant de définir, manipuler et interroger des bases de données relationnelles.
- Il permet de créer et modifier la structure des tables.
- Il permet d’insérer, modifier et supprimer des données.
- Il permet d’effectuer des requêtes pour extraire des informations.
SQL est utilisé par les systèmes de gestion de bases de données relationnelles (SGBDR).
Reprenons l'exemple des tables Classe et Eleve du chapitre sur les bases de données.
Table Classe :
| id_classe | nom_classe |
|---|---|
| 1 | Terminale NSI |
| 2 | Première NSI |
Table Eleve :
| id_eleve | nom | prenom | moyenne | id_classe |
|---|---|---|---|---|
| 10 | Martin | Alice | 13 | 1 |
| 11 | Durand | Hugo | 12 | 1 |
| 12 | Petit | Emma | 18 | 2 |
2️⃣ Requêtes interrogatives
SELECT * FROM Eleve;
- Renvoit:
| id_eleve | nom | prenom | moyenne | id_classe |
|---|---|---|---|---|
| 10 | Martin | Alice | 13 | 1 |
| 11 | Durand | Hugo | 12 | 1 |
| 12 | Petit | Emma | 18 | 2 |
Il est possible de ne sélectionner que certaines colonnes:
SELECT nom, prenom FROM Eleve;
- Renvoit:
| prenom | nom |
|---|---|
| Martin | Alice |
| Durand | Hugo |
| Petit | Emma |
On peut enfin ordonner les résultats avec la clause ORDER BY.
SELECT * FROM Eleve ORDER BY moyenne;
- Renvoit:
| id_eleve | nom | prenom | moyenne | id_classe |
|---|---|---|---|---|
| 11 | Durand | Hugo | 12 | 1 |
| 10 | Martin | Alice | 13 | 1 |
| 12 | Petit | Emma | 18 | 2 |
3️⃣ Filtrage des données
La clause WHERE:
SELECT * FROM Eleve WHERE moyenne>13;
- Renvoit:
| id_eleve | nom | prenom | moyenne | id_classe |
|---|---|---|---|---|
| 12 | Petit | Emma | 18 | 2 |
On peut associer des condition avec AND:
SELECT * FROM Eleve
WHERE moyenne<18 AND prenom='Hugo';
- Renvoit:
| id_eleve | nom | prenom | moyenne | id_classe |
|---|---|---|---|---|
| 11 | Durand | Hugo | 12 | 1 |
Recherche sur du texte avec LIKE:
SELECT * FROM Eleve
WHERE nom LIKE %ti%;
- Renvoit:
| id_eleve | nom | prenom | moyenne | id_classe |
|---|---|---|---|---|
| 10 | Martin | Alice | 13 | 1 |
| 12 | Petit | Emma | 18 | 2 |
- Le caractère % signifie: n'importe quel texte.
- Seuls Martin et Alice ont un "ti" dans leur nom de famille.
- La clause LIKE est utilisée dans les moteurs de recherche.
4️⃣ Les jointures
Une jointure permet de combiner les données de plusieurs tables en se basant sur une relation entre leurs colonnes (généralement une clé primaire et une clé étrangère).
SELECT nom, prenom FROM Eleve
JOIN Classe
ON Eleve.id_eleve = Classe.id_classe
WHERE Classe.nom_classe="Terminale NSI";
- Renvoit:
| nom | prenom |
|---|---|
| Martin | Alice |
| Durand | Hugo |
- Objectif : récupérer le nom et le prénom des élèves qui sont dans la classe "Terminale NSI".
- Tables impliquées :
EleveetClasse. - Clé de liaison :
Eleve.id_classeetClasse.id_classeservent à relier chaque élève à sa classe. Cette notation pointée de typetable.attributest obligatoire. - Filtrage :
WHEREClasse.nom_classe="Terminale NSI"limite les résultats à la classe "Terminale NSI". - Résultat : une liste des élèves de la classe "Terminale NSI" avec leurs noms et prénoms.
- Remarque pédagogique : cette requête illustre comment relier des données réparties sur plusieurs tables et filtrer selon un critère précis.
5️⃣ Les clauses d'agrégation
Les clauses d'agrégation permettent de réaliser des calculs sur des ensembles de données. Elles ne sont pas au programme, mais si le sujet en fait usage, leur signification sera précisée.
COUNT(*): compte le nombre de lignes dans une table ou un résultat filtré.SUM(colonne): calcule la somme des valeurs numériques decolonne.MIN(colonne): retourne la valeur minimale decolonne.MAX(colonne): retourne la valeur maximale decolonne.
Exemple : Compter le nombre d'élèves.
SELECT COUNT(*)
FROM Eleve
→ Renvoit 3.
💡 Même si ces fonctions ne sont pas au programme NSI Terminale, elles apparaissent parfois dans les sujets et leur compréhension est alors nécessaire.
6️⃣ Mise à jour d'une table
Un peut mettre à jour une table avec les clauses UPDATE puis SET, par exemple:
UPDATE Eleve
SET moyenne=14
WHERE id_eleve = 11;
- Table mise à jour:
| id_eleve | nom | prenom | moyenne | id_classe |
|---|---|---|---|---|
| 10 | Martin | Alice | 13 | 1 |
| 11 | Durand | Hugo | 14 | 1 |
| 12 | Petit | Emma | 18 | 2 |
- ⚠️ Les élèves oublient souvent la clause SET
- ⚠️ La clause WHERE est indispensable, sinon toutes les lignes sont modifiées.
7️⃣ Insertion
Une rquête d'insertion s'effectue avec les clauses INSERT INTO puis VALUES, par exemple:
INSERT INTO Eleve
VALUES (13, "Hennessy" ,"Jo", 11, 2 )
- Table mise à jour:
| id_eleve | nom | prenom | moyenne | id_classe |
|---|---|---|---|---|
| 10 | Martin | Alice | 13 | 1 |
| 11 | Durand | Hugo | 14 | 1 |
| 12 | Petit | Emma | 18 | 2 |
| 13 | Hennessy | Jo | 11 | 2 |
- ⚠️ Ne jamais oublier les guillemets si l'enregistrement est de type TEXT (ou VARCHAR).
- La valeur de
id_elevene doit pas déjà exister car c'est une clé primaire.
🔗 Consulez ici la grande quantité d'exercices de bac sur le langage SQL.