Bientôt

Apprendre le SQL seul : un parcours pour débutant, du premier SELECT aux jointures

Le SQL est le langage qui sert à interroger une base de données : retrouver des clients, compter des ventes, croiser deux listes. C’est l’une des compétences les plus demandées dès qu’on travaille avec des données, et c’est l’une des plus abordables : quelques mots-clés suffisent pour écrire des requêtes utiles.

Voici un parcours en six étapes pour apprendre seul, dans l’ordre où les notions s’appuient les unes sur les autres. Comptez plusieurs séances par étape, et surtout : écrivez des requêtes à chaque séance. On n’apprend pas le SQL en lisant.

Avant de commencer : installer de quoi s’exercer

Il vous faut une base de données sur laquelle essayer vos requêtes. Deux solutions gratuites :

  • SQLite avec le logiciel libre DB Browser for SQLite : rien à configurer, la base tient dans un seul fichier. Idéal pour débuter.
  • PostgreSQL, gratuit lui aussi : plus long à installer, mais c’est un système très utilisé en entreprise.

Prenez ensuite une petite base d’exemple, ou créez la vôtre : une table clients et une table commandes suffisent pour tout ce parcours.

Étape 1 : comprendre ce qu’est une table

Une table ressemble à une feuille de tableur : des colonnes (nom, ville, date d’inscription) et des lignes (un client par ligne). Deux différences importantes :

  • chaque colonne a un type (texte, nombre, date), et toutes ses valeurs le respectent ;
  • chaque ligne a en général un identifiant unique (id), qui permet de la retrouver sans ambiguïté.

Retenez ce deuxième point : c’est lui qui rendra les jointures possibles à l’étape 6.

Étape 2 : votre premier SELECT

SELECT dit quelles colonnes vous voulez, FROM dit dans quelle table :

SELECT nom, ville
FROM clients;

SELECT * affiche toutes les colonnes. Pratique pour découvrir une table, à éviter ensuite : vous récupérez plus que nécessaire.

Exercice : affichez le nom et la date d’inscription de tous les clients.

Étape 3 : filtrer avec WHERE

WHERE garde seulement les lignes qui respectent une condition :

SELECT nom, ville
FROM clients
WHERE ville = 'Lyon';

Vous pouvez combiner les conditions avec AND et OR, chercher un motif avec LIKE (nom LIKE 'Ma%' : les noms qui commencent par « Ma »), ou une liste de valeurs avec IN.

Un piège classique : une valeur absente s’appelle NULL, et elle ne se teste pas avec =. On écrit WHERE telephone IS NULL.

Exercice : les clients de Lyon ou de Lille inscrits depuis le 1er janvier.

Étape 4 : trier et limiter

SELECT nom, date_inscription
FROM clients
ORDER BY date_inscription DESC
LIMIT 10;

ORDER BY trie (ASC du plus petit au plus grand, DESC l’inverse). LIMIT garde les premières lignes : ici, les dix derniers inscrits. LIMIT existe dans SQLite, PostgreSQL et MySQL ; d’autres systèmes utilisent une autre syntaxe pour la même chose.

Étape 5 : compter et regrouper

Les fonctions d’agrégation résument plusieurs lignes en une valeur : COUNT (nombre), SUM (somme), AVG (moyenne), MIN, MAX. Avec GROUP BY, vous obtenez un résultat par groupe :

SELECT ville, COUNT(*) AS nombre_clients
FROM clients
GROUP BY ville;

Pour filtrer après le regroupement, on utilise HAVING, pas WHERE :

SELECT ville, COUNT(*) AS nombre_clients
FROM clients
GROUP BY ville
HAVING COUNT(*) >= 5;

La règle à retenir : WHERE filtre les lignes avant le regroupement, HAVING filtre les groupes après.

Exercice : le montant total des commandes par client, du plus grand au plus petit.

Étape 6 : les jointures

Une commande ne recopie pas le nom du client : elle contient son identifiant, dans une colonne client_id. Pour afficher les deux ensemble, on joint les tables :

SELECT clients.nom, commandes.montant
FROM commandes
JOIN clients ON clients.id = commandes.client_id;

JOIN (ou INNER JOIN) garde seulement les lignes qui ont une correspondance des deux côtés. LEFT JOIN garde toutes les lignes de la table de gauche, même sans correspondance :

SELECT clients.nom, commandes.montant
FROM clients
LEFT JOIN commandes ON commandes.client_id = clients.id;

Les clients sans commande apparaissent alors avec un montant NULL. C’est ainsi qu’on répond à « quels clients n’ont jamais commandé ? » (ajoutez WHERE commandes.id IS NULL).

Exercice : le nombre de commandes de chaque client, y compris ceux qui n’en ont aucune.

Comment savoir que vous progressez

  • Vous lisez une requête d’une dizaine de lignes et vous dites ce qu’elle renvoie avant de l’exécuter.
  • Vous savez pourquoi une requête renvoie trop de lignes (souvent : une jointure sans la bonne condition).
  • Vous posez vos propres questions à une base (« quel mois a eu le plus de commandes ? ») et vous trouvez la requête.

Ensuite viennent les sous-requêtes, les fonctions de date, puis les fonctions de fenêtre. Mais avec ces six étapes, vous savez déjà répondre à la plupart des questions courantes.

Suivre ce parcours avec un cours sur mesure

Lightlearn vous permettra bientôt de créer un cours sur ce sujet, à votre niveau et selon le temps dont vous disposez, découpé en modules avec des quiz pour vérifier que vous avez compris. Le cours sera généré par IA : il pourra contenir des erreurs.