Les requêtes SQL de type SELECT permettent d'extraire des données d'une base de données. Elles constituent le cœur de la manipulation des données relationnelles. Ce cours détaille les principales fonctionnalités de SELECT avec des exemples concrets en SQLite et MySQL, tout en mettant en lumière les différences de syntaxe lorsque c'est pertinent.
La structure de base d'une requête SELECT est la suivante :
SELECT colonne(s)
FROM table
[WHERE condition]
[GROUP BY colonne(s)]
[HAVING condition]
[ORDER BY colonne(s) [ASC|DESC]]
[LIMIT n OFFSET m];
SELECT permet de choisir les colonnes que vous souhaitez récupérer. Il est possible de sélectionner toutes les colonnes avec SELECT * ou de spécifier uniquement les colonnes nécessaires.
SELECT nom, age
FROM utilisateurs;
Ce type de requête permet d'optimiser les performances en ne récupérant que les colonnes nécessaires, contrairement à :
SELECT *
FROM utilisateurs;
Cette requête récupère toutes les colonnes de la table, ce qui peut être lourd si la table contient de nombreuses colonnes ou si seules certaines données sont nécessaires.
| id | nom | age | |
|---|---|---|---|
| 1 | Alice | 25 | alice@example.com |
| 2 | Bob | 30 | bob@example.com |
Même si SELECT * est pratique pour des tests rapides, privilégiez une sélection explicite dans un environnement de production pour éviter de manipuler des données inutiles.
Un alias est un nom temporaire donné à une colonne ou une valeur calculée dans une requête. Cela permet d'améliorer la lisibilité et la compréhension des résultats.
Un alias s'applique en utilisant le mot-clé AS ou simplement un espace après le nom ou l'expression.
SELECT colonne AS alias
FROM table;
SELECT nom AS utilisateur, age AS âge
FROM utilisateurs;
Résultat attendu :
| utilisateur | âge |
|---|---|
| Alice | 25 |
| Bob | 30 |
Les alias sont particulièrement utiles pour nommer des colonnes calculées, comme les résultats des fonctions d’agrégation.
SELECT SUM(age) AS total_age, AVG(age) AS moyenne_age
FROM utilisateurs;
Résultat attendu :
| total_age | moyenne_age |
|---|---|
| 55 | 27.5 |
ASDans MySQL et SQLite, l’utilisation de AS est facultative. L’alias peut être appliqué en plaçant un espace après la colonne ou l’expression.
SELECT nom utilisateur, age âge
FROM utilisateurs;
Cependant, pour des raisons de clarté et de cohérence, l’utilisation explicite de AS est recommandée.
La clause WHERE permet de spécifier des conditions pour filtrer les lignes retournées.
SELECT nom, age
FROM utilisateurs
WHERE age > 25;
Résultat attendu :
| nom | age |
|---|---|
| Bob | 30 |
Les opérateurs permettent de définir des conditions dans la clause WHERE.
| Opérateur | Description | Exemple |
|---|---|---|
| = | Égal | age = 30 |
| != ou <> | Différent | age != 30 |
| > | Supérieur | age > 25 |
| < | Inférieur | age < 30 |
| >= | Supérieur ou égal | age >= 25 |
| <= | Inférieur ou égal | age <= 30 |
AND : Toutes les conditions doivent être vraies.OR : Une seule condition doit être vraie.SELECT nom, email
FROM utilisateurs
WHERE age > 25 AND email LIKE '%example.com';
Résultat attendu :
| nom | |
|---|---|
| Bob | bob@example.com |
LIKE est utilisé pour rechercher des motifs dans des chaînes de caractères.
| Modèle | Description |
|---|---|
% |
Remplace 0 ou plusieurs caractères. |
_ |
Remplace un seul caractère. |
SELECT nom
FROM utilisateurs
WHERE email LIKE '%@example.com';
Résultat attendu :
| nom |
|---|
| Alice |
| Bob |
ORDER BY permet de trier les résultats en ordre croissant (ASC) ou décroissant (DESC).
SELECT nom, age
FROM utilisateurs
ORDER BY age DESC;
Résultat attendu :
| nom | age |
|---|---|
| Bob | 30 |
| Alice | 25 |
Les fonctions d'agrégation permettent de réaliser des calculs sur des ensembles de données.
| Fonction | Description |
|---|---|
SUM |
Somme des valeurs |
AVG |
Moyenne des valeurs |
MIN |
Valeur minimale |
MAX |
Valeur maximale |
COUNT |
Nombre de lignes correspondantes |
SELECT COUNT(*) AS total_utilisateurs, AVG(age) AS moyenne_age
FROM utilisateurs;
Résultat attendu :
| total_utilisateurs | moyenne_age |
|---|---|
| 2 | 27.5 |
SELECT code AS code_etat, nom AS nom_etat
FROM Etats;
SELECT code AS code_etat, nom AS nom_etat
FROM Etats
WHERE grd > 10;
SELECT SUM(grd) AS total_grands_electeurs
FROM Etats;
SELECT nom AS nom_etat, grd AS grands_electeurs
FROM Etats
ORDER BY grd DESC;
SELECT code AS code_etat, nom AS nom_etat
FROM Etats
WHERE vainqueur IS NOT NULL;
SELECT COUNT(*) AS total_etats
FROM Etats;
SELECT code AS code_etat, nom AS nom_etat
FROM Etats
WHERE vainqueur != vainqueur_2020;
SELECT code AS code_etat, nom AS nom_etat, champlibre AS description
FROM Etats
WHERE champlibre IS NOT NULL;
SELECT AVG(grd) AS moyenne_grands_electeurs
FROM Etats;
SELECT code AS code_etat, nom AS nom_etat
FROM Etats
WHERE grd = 3;
Ces exemples montrent l'utilité des alias pour rendre les colonnes ou les résultats calculés plus lisibles dans les résultats des requêtes.