SQL (Structured Query Language) est un langage standardisé permettant de définir, manipuler et interroger des bases de données relationnelles.
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 |
SELECT * FROM Eleve;
| 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;
| 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;
| id_eleve | nom | prenom | moyenne | id_classe |
|---|---|---|---|---|
| 11 | Durand | Hugo | 12 | 1 |
| 10 | Martin | Alice | 13 | 1 |
| 12 | Petit | Emma | 18 | 2 |
La clause WHERE:
SELECT * FROM Eleve WHERE moyenne>13;
| 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';
| 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%;
| id_eleve | nom | prenom | moyenne | id_classe |
|---|---|---|---|---|
| 10 | Martin | Alice | 13 | 1 |
| 12 | Petit | Emma | 18 | 2 |
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";
| nom | prenom |
|---|---|
| Martin | Alice |
| Durand | Hugo |
Eleve et Classe.Eleve.id_classe et Classe.id_classe servent à relier chaque élève à sa classe. Cette notation pointée de type table.attribut est obligatoire.WHERE Classe.nom_classe="Terminale NSI" limite les résultats à la classe "Terminale NSI".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 de colonne.MIN(colonne) : retourne la valeur minimale de colonne.MAX(colonne) : retourne la valeur maximale de colonne.Exemple : Compter le nombre d'élèves.
SELECT COUNT(*)
FROM Eleve
💡 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.
Un peut mettre à jour une table avec les clauses UPDATE puis SET, par exemple:
UPDATE Eleve
SET moyenne=14
WHERE id_eleve = 11;
| id_eleve | nom | prenom | moyenne | id_classe |
|---|---|---|---|---|
| 10 | Martin | Alice | 13 | 1 |
| 11 | Durand | Hugo | 14 | 1 |
| 12 | Petit | Emma | 18 | 2 |
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 )
| 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 |
id_eleve ne doit pas déjà exister car c'est une clé primaire.
🔗 Consulez ici la grande quantité d'exercices de bac sur le langage SQL.