Cours complet – Bases du langage SQL
Introduction
Les bases de données relationnelles sont aujourd’hui au cœur de la majorité des systèmes informatiques : applications web, logiciels métiers, systèmes scientifiques ou administratifs.
Le langage SQL (Structured Query Language) est le langage standard permettant d’interroger ces bases de données.
Dans ce cours, nous nous concentrons sur les requêtes SQL portant sur une seule table.
L’objectif est de savoir extraire, filtrer, trier et agréger des données contenues dans une table existante, sans aborder la création ou la modification de tables.
I. Vocabulaire fondamental des bases de données relationnelles
1. Tables et relations
Étant donnés des ensembles ($E_1, E_2, \ldots, E_n$), on appelle table (ou relation) tout sous-ensemble de
$ E_1 \times E_2 \times \cdots \times E_n $
Autrement dit, une table est un ensemble de n-uplets.
Une base de données relationnelle est simplement un ensemble de tables.
2. Enregistrements, attributs et domaines
- Un enregistrement (ou ligne) correspond à un n-uplet de la table
- Un attribut (ou colonne) désigne un des champs de la table
- Le domaine d’un attribut correspond au type des valeurs qu’il peut prendre
Exemple : table des éléments chimiques
On considère une table tableau représentant la classification de Mendeleïev, de schéma :
| nom | numéro_atomique | symbole | colonne | ligne | bloc |
|---|---|---|---|---|---|
| Hydrogène | 1 | H | 1 | 1 | s |
| Hélium | 2 | He | 18 | 1 | s |
| Lithium | 3 | Li | 1 | 2 | s |
| Béryllium | 4 | Be | 2(IIA) | 2 | s |
- Un enregistrement est par exemple :
(Hydrogène, 1, H, 1, 1, s) - Les attributs sont :
nom,numéro_atomique,symbole,colonne,ligne,bloc - Les domaines :
- chaînes de caractères :
nom,symbole,colonne,bloc - entiers :
numéro_atomique,ligne
- chaînes de caractères :
⚠️ Dans le programme, les domaines sont limités aux entiers, flottants et chaînes de caractères.
Les dates peuvent être représentées comme des chaînes de la forme aaaa/mm/jj.
3. Clé primaire
Une clé primaire est un attribut (ou un ensemble d’attributs) permettant d’identifier de façon unique un enregistrement.
Exemple
Dans la table tableau, les attributs suivants peuvent être clés primaires :
numéro_atomiquesymbole
Exemple hospitalier
Table patients :
| prenom | nom | numero_secu |
|---|---|---|
| Jean | Dupont | 1221233052555 |
| Marie | Dupond | 2221275265875 |
Table operations :
| id | nom | numero_secu | date_operation | chirurgien |
|---|---|---|---|---|
| 1 | Dupont | 1221233052555 | 2022/12/05 | Dr Durand |
| 2 | Dupond | 2221275265875 | 2022/12/06 | Dr Durand |
numero_secuest clé primaire danspatients- Il ne peut pas l’être dans
operations - On introduit alors un attribut artificiel
idcomme clé primaire
⚠️ Les enregistrements d’une table ne sont pas ordonnés.
La clé primaire garantit leur unicité.
II. Bases du langage SQL
L’objectif principal de SQL est de rechercher des informations contenues dans les tables à l’aide de requêtes.
1. Projection : sélectionner des colonnes
La projection permet de choisir les attributs que l’on souhaite afficher.
SELECT attribut1, attribut2, ... FROM table;
Cette requête produit une nouvelle table ne contenant que les colonnes demandées.
Exemples
SELECT * FROM tableau;
→ renvoie tous les attributs et tous les enregistrements
SELECT nom, symbole FROM tableau;
→ renvoie le nom et le symbole de chaque élément chimique
Éliminer les doublons : DISTINCT
SELECT DISTINCT ligne, bloc FROM tableau;
Sans DISTINCT, plusieurs lignes identiques peuvent apparaître.
2. Sélection : filtrer les lignes (WHERE)
La sélection permet de ne conserver que les enregistrements satisfaisant une condition.
SELECT attributs FROM table WHERE condition;
Opérateurs utilisables
- Comparaison :
=,<>,<,<=,>,>= - Opérations arithmétiques :
+,-,*,/ - Logique :
AND,OR,NOT
Exemples
SELECT nom, symbole FROM tableau WHERE ligne = 2;
→ éléments situés sur la deuxième ligne du tableau périodique
SELECT symbole
FROM tableau
WHERE numero_atomique < 20 AND symbole <= 'D';
→ symboles commençant par A, B, C ou D, de numéro atomique < 20
3. Renommage avec AS (alias)
Les alias permettent de renommer temporairement des colonnes ou des tables.
SELECT symbole, numero_atomique AS n FROM tableau WHERE n < 20;
La clause AS est facultative :
SELECT symbole, numero_atomique n FROM tableau WHERE n < 20;
Les alias sont indispensables lorsque :
- les noms sont longs
- plusieurs tables contiennent des attributs identiques (vu plus tard)
4. Options d’affichage
Trier les résultats : ORDER BY
SELECT symbole, numero_atomique
FROM tableau
WHERE ligne = 3
ORDER BY bloc;
Par défaut, le tri est croissant (ordre lexicographique pour les chaînes).
Limiter le nombre de résultats : LIMIT et OFFSET
SELECT symbole FROM tableau LIMIT 4 OFFSET 1;
→ renvoie 4 résultats à partir du 2ᵉ enregistrement
⚠️ Sans ORDER BY, l’ordre peut être imprévisible.
III. Fonctions d’agrégation
Les fonctions d’agrégation permettent d’effectuer un calcul sur un ensemble d’enregistrements.
| Fonction | Rôle |
|---|---|
| COUNT | Compte les enregistrements |
| AVG | Moyenne |
| MIN | Minimum |
| MAX | Maximum |
| SUM | Somme |
1. Utilisations simples
SELECT f(attribut) FROM table;
Exemples
SELECT COUNT(*) FROM tableau;
→ nombre total d’éléments
SELECT COUNT(DISTINCT ligne) FROM tableau;
→ nombre de lignes différentes (7)
SELECT SUM(numero_atomique) FROM tableau WHERE ligne = 2;
→ somme des numéros atomiques de la ligne 2
2. Regroupements : GROUP BY
La clause GROUP BY permet d’appliquer une fonction d’agrégation par groupes.
SELECT AVG(numero_atomique) FROM tableau GROUP BY ligne;
→ moyenne par ligne du tableau périodique
WHERE avant GROUP BY
SELECT MAX(numero_atomique), MIN(numero_atomique)
FROM tableau
WHERE ligne > 3
GROUP BY bloc;
Filtrage après agrégation : HAVING
SELECT SUM(numero_atomique)
FROM tableau
GROUP BY ligne
HAVING COUNT(*) > 8;
→ lignes contenant au moins 9 éléments
SELECT bloc, COUNT(DISTINCT colonne), MAX(numero_atomique) AS M
FROM tableau
WHERE ligne > 2
GROUP BY bloc
HAVING M < 100;
Différence fondamentale entre WHERE et HAVING
- WHERE filtre les lignes avant l’agrégation
- HAVING filtre les groupes après l’agrégation
❌ HAVING ne peut pas être utilisé sans GROUP BY
Conclusion
Les requêtes SQL sur une seule table constituent la base indispensable de toute manipulation de données relationnelles.
La maîtrise de SELECT, WHERE, ORDER BY, GROUP BY et des fonctions d’agrégation permet déjà de répondre à une grande majorité de problématiques concrètes.
Ce socle sera réutilisé et étendu dans l’étude des requêtes multi-tables, des jointures et des sous-requêtes.
La deuxième partie du cours : Requêtes SQL sur plusieurs tables
FAQ – Requêtes SQL sur une seule table
Qu’est-ce qu’une requête SQL sur une seule table ?
Une requête SQL sur une seule table est une instruction qui permet d’extraire, filtrer ou organiser les données contenues dans une table unique d’une base de données relationnelle, sans utiliser de jointure.
À quoi sert la commande SELECT en SQL ?
La commande SELECT permet de choisir les colonnes que l’on souhaite afficher à partir
d’une table. Elle constitue la base de toutes les requêtes SQL.
Quelle est la différence entre SELECT et SELECT DISTINCT ?
SELECT affiche toutes les lignes correspondant à la requête, y compris les doublons.
SELECT DISTINCT permet d’éliminer les lignes identiques dans le résultat.
Comment filtrer des lignes en SQL ?
Pour filtrer des lignes, on utilise la clause WHERE, qui permet de ne conserver que
les enregistrements satisfaisant une condition logique ou arithmétique.
Quels opérateurs peut-on utiliser dans une clause WHERE ?
Dans une clause WHERE, on peut utiliser les opérateurs de comparaison
(=, <, >, <=, >=, <>),
les opérateurs logiques (AND, OR, NOT) ainsi que les opérations
arithmétiques (+, -, *, /).
Comment trier les résultats d’une requête SQL ?
La clause ORDER BY permet de trier les résultats d’une requête SQL selon une ou plusieurs
colonnes, par ordre croissant ou décroissant.
À quoi servent LIMIT et OFFSET en SQL ?
LIMIT permet de restreindre le nombre de résultats affichés, tandis que
OFFSET permet d’ignorer les premiers résultats, ce qui est notamment utile pour la pagination.
Qu’est-ce qu’une fonction d’agrégation en SQL ?
Une fonction d’agrégation permet d’effectuer un calcul sur un ensemble d’enregistrements, comme
COUNT, SUM, AVG, MIN ou MAX.
Quelle est la différence entre WHERE et HAVING ?
La clause WHERE filtre les lignes avant l’application des fonctions d’agrégation,
tandis que la clause HAVING filtre les groupes après l’utilisation de GROUP BY.
Peut-on utiliser GROUP BY sans fonction d’agrégation ?
Non. En SQL, la clause GROUP BY doit obligatoirement être utilisée avec au moins
une fonction d’agrégation.
Pourquoi utiliser des alias avec AS en SQL ?
Les alias permettent de renommer temporairement une colonne ou une table afin de rendre les requêtes SQL plus lisibles et plus faciles à manipuler.
Ce cours de SQL est-il suffisant pour les concours et examens ?
Oui. Ce cours couvre l’ensemble des requêtes SQL sur une seule table attendues en CPGE, à l’université et dans les premières années d’école d’ingénieurs. Le lien vers la deuxième partie de ce cours, concernant les requêtes multi-tables, également au programme des concours CPGE, est donné dans la conclusion.
Commentaires