Ce cours sur le SQL a pour but de donner des bases pour quiconque voudrait avoir une vision globale sur ce sujet. Il permet d’avoir une vision globale sur comment lire une base de données et faire des requêtes. Cet article est le premier d’une série de 5 articles et a pour vocation à présenter les commandes de base.
Ce cours a vocation à être une introduction détaillée au SQL. Si vous voulez un cours plus complet, je ne peux que vous conseiller le site SQL.sh.
Sommaire du cours
- Partie 1 : Bases de données, commandes de bases : SELECT, FROM
- Partie 2 : WHERE, LIMIT, OFFSET, ORDER BY
- Partie 3 : Les jointures
- Partie 4 : Les fonctions d’agrégation
- Partie 5 : Les fonctions avancées : mathématiques, dates, chaines de caractère, cryptographie, …
Bases de données
Qu’est-ce que le SQL ?
Pour travailler avec des données, il faut un système de bases de données.
Associé à ce système de données, un logiciel appelé Système de Gestion de bases de données (SGBD) permet de les manipuler. Si ces données sont dites relationnelles ce logiciel sera plutôt un Système de Gestion de bases de données relationnelles (SGBDR)
Pour dialoguer avec ce système, on a un langage de programmation : le SQL
Les SGBDR les plus connus sont :
- MySQL
- PostgreSQL
- Microsoft Access
- Oracle Database
- SQLite
Le langage SQL possède trois modalités :
- Le LDD : Langage de définition de données. Il sert à créer ou supprimer des éléments de la base de données (tables, contraintes, …)
- Le LCD : Langage de contrôle des données. Il permet de gérer les utilisateurs d’une base de données ainsi que leurs droits sur les objets (droit de lecture, droit de modification, administrateur, …)
- Le LMD: Langage de manipulation des données. Il est destiné à manipuler les données contenues dans les tables.
Nous allons principalement nous intéresser à la partie langage de manipulation de données.
Le langage de manipulation des données
Le LMD contient 4 opérations principales :
- La création de lignes : Fonction insert
- La lecture de lignes : Fonction select
- L’actualisation de lignes : Fonction update
- La suppression de lignes : Fonction delete
Ce cours va s’intéresser à la partie lecture de lignes
A quoi ressemble une base de données ?
- Une base de données est un ensemble de datasets (appelé en français jeu de données) et de tables
- Les datasets sont les équivalents des dossiers sur un ordinateur
- Chaque dataset contient ensuite des tables. Un dataset peut contenir une seule table. Par exemple, un fichier CSV ou JSON peut être considéré comme un “jeu de données”
Qu’est-ce qu’une table ?

Bon évidemment une table, ce n’est pas la première photo du meme mais bien la deuxième ! Cela ressemble fortement à des cellules en Microsoft Excel / Google Sheets.
Voici ce qui caractérise une table :
- Une table contient des lignes et des colonnes
- Une table contient une clé primaire et peut contenir des clés étrangères. La clé primaire est une clé qui permet de s’assurer qu’une ligne est bien unique. Les clés étrangères vont pouvoir permettre de faire le lien avec d’autres tables
- Chaque colonne a une définition et des contraintes
- A partir de là on remplit des lignes correspondants à ces contraintes
La clé primaire est un identifiant unique qui permet de déterminer chaque ligne d’une table de manière unique. La clé primaire est constituée d’une ou plusieurs colonnes.
Exemple : On a une table avec numéro de sécurité sociale, nom, prénom, second prénom, date de naissance. Le numéro de sécurité sociale peut être la clé primaire, c’est un identifiant unique
Une clé secondaire est un identifiant, constitué d’une ou plusieurs colonnes permettant de relier entre elles plusieurs tables.
Exemple : On a :
- Une table 1 qui contient titre de film, ID de film
- Une table 2 qui contient un ID unique de note, un ID de film, un ID de personne et la note associée
Dans la table 1 l’ID est la clé primaire, dans la table 2 c’est une clé étrangère qui permet de faire le lien avec la table 1, l’ID unique de note étant la clé primaire.
Les colonnes
Chaque colonne est définie par un type. Voici la liste simplifiée des types :
Type | Exemple |
String / Chaîne de caractères | ‘Bonjour’ |
Integer / Entier | 2 |
Float / Nombre à virgule | 3,1415926535 |
Date | 2021/05/17 |
Timestamp | 17/05/2021 – 11:30:09 |
Boolean | True / False |
Les colonnes peuvent être nullable : on a le droit de ne pas remplir cette colonne à un instant donné. Et a contrario, elles peuvent être non nullable : Cette colonne là doit toujours être remplie
SELECT et FROM
Définition
Toute requête de lecture des données doit contenir ces deux commandes, SELECT et FROM.
SELECT permet de choisir les colonnes dont a besoin. FROM permet de choisir le nom de la table
Exemples
Exemple : Admettons que l’on dispose de la table “Personnes” possédant 4 colonnes :
- secu_sociale qui représente le Numéro de sécurité sociale
- nom qui représente le nom de famille
- prenom qui représente le prénom
- ville qui représente la ville de naissance
Voici un extrait de cette table :
secu_sociale | nom | prenom | ville |
1 | Dupont | Baptiste | Paris |
2 | Durand | Jean | Marseille |
3 | Duchene | Pierre | Lyon |
4 | Dupont | Paul | Parisis |
5 | Durand | Jacques | Marseille |
6 | Girard | Baptiste | Paris |
Si on veut sélectionner les numéros de sécurité sociale et les noms de famille, on fait la requête suivante :
SELECT
secu_sociale, nom
FROM
personnes
On obtient alors le résultat suivant :
secu_sociale | nom |
1 | Dupont |
2 | Durand |
3 | Duchene |
4 | Dupont |
5 | Durand |
6 | Girard |
Si on veut seulement les prénoms, on fait la requête suivante :
SELECT
prenom
FROM
personnes
Ce qui nous donne cette fois le résultat
prenom |
Baptiste |
Jean |
Pierre |
Paul |
Jacques |
Baptiste |
Si on veut sélectionner toutes les colonnes, on utilise la commande * . On fait ainsi la requête suivante :
SELECT
*
FROM
personnes
Ce qui nous donne donc à nouveau
secu_sociale | nom | prenom | ville |
1 | Dupont | Baptiste | Paris |
2 | Durand | Jean | Marseille |
3 | Duchene | Pierre | Lyon |
4 | Dupont | Paul | Parisis |
5 | Durand | Jacques | Marseille |
6 | Girard | Baptiste | Paris |
SELECT DISTINCT
Maintenant, on veut la liste de tous les prénoms mais sans les doublons. On s’aperçoit qu’il y a notamment 2 “Baptiste”. On rajoute alors DISTINCT derrière le SELECT. On fait alors la requête suivante :
SELECT DISTINCT
prenom
FROM
personnes
On obtient le résultat suivant :
prenom |
Baptiste |
Jean |
Pierre |
Paul |
Jacques |
On peut bien sûr le faire avec 2 colonnes :
SELECT DISTINCT
prenom, ville
FROM
personnes
On avait 2 lignes avec un Baptiste né à Paris, on n’a gardé qu’une seule ligne :
prenom | ville |
Baptiste | Paris |
Jean | Marseille |
Pierre | Lyon |
Paul | Parisis |
Jacques | Marseille |
La commande AS
On peut renommer une colonne ou une table grâce à la commande AS
SELECT
nom AS nm, prenom AS prnm
FROM
personnes as pr
On obtient le résultat suivant :
nm | prnm |
Dupont | Baptiste |
Durand | Jean |
Duchene | Pierre |
Dupont | Paul |
Durand | Jacques |
Girard | Baptiste |
La commande EXCEPT
Si on veut sélectionner toutes les colonnes sauf une, on utilise la commande EXCEPT
SELECT
* EXCEPT secu_sociale
FROM
personnes
On obtient le résultat suivant :
nom | prenom | ville |
Dupont | Baptiste | Paris |
Durand | Jean | Marseille |
Duchene | Pierre | Lyon |
Dupont | Paul | Parisis |
Durand | Jacques | Marseille |
Girard | Baptiste | Paris |
Résumé
- SELECT permet de choisir les colonnes dont a besoin
- FROM permet de choisir le nom de la table
- On peut sélectionner une ou plusieurs colonnes
- La commande * permet de sélectionner toutes les colonnes d’un coup
- Si on veut sélectionner les lignes de manière unique, SELECT DISTINCT permet de le faire
- La commande AS permet de renommer une colonne