Guide débutant

Apprendre SQL : le guide complet pour débutant

Une méthode progressive pour passer d’une question métier à une requête fiable, même si vous n’avez jamais utilisé de base de données.

Équipe SQL.tn14 min
Chemin visuel reliant une question métier, des tables de données, une requête SQL et un résultat validé

Pourquoi apprendre SQL aujourd’hui ?

Une entreprise conserve ses clients, commandes, produits et paiements dans des données structurées. SQL permet de poser une question précise à ces données : retrouver une commande, calculer un chiffre d’affaires, rapprocher des clients de leurs achats ou contrôler une anomalie.

SQL est un langage. PostgreSQL, MySQL et SQL Server sont des systèmes de gestion de bases de données qui comprennent chacun un dialecte de ce langage. Vous pouvez donc apprendre les principes communs avant de vous spécialiser dans un moteur.

Un tableur reste très utile pour une analyse ponctuelle. Une base devient particulièrement pertinente lorsque les données sont nombreuses, reliées, partagées ou mises à jour par plusieurs processus.

Objectif de ce guide : savoir lire une table, filtrer des lignes, calculer un indicateur et relier deux sources sans mémoriser tout SQL d’un seul coup.

Commencez par la question, pas par le code

Avant d’écrire une requête, reformulez le besoin en une phrase vérifiable. « Quels clients ont commandé ? » et « Quels clients ont payé ? » ne désignent pas le même périmètre. Cette précision évite de produire un résultat techniquement valide mais faux pour le métier.

Repérez ensuite la granularité : une ligne représente-t-elle un client, une commande ou un produit commandé ? Enfin, identifiez les colonnes utiles et le contrôle qui permettra de vérifier le résultat.

  • Question : quel résultat doit être livré ?
  • Périmètre : quelles lignes doivent être incluses ou exclues ?
  • Granularité : que représente exactement une ligne du résultat ?
  • Contrôle : quel total ou échantillon permet de détecter une erreur ?

Lire et filtrer avec SELECT, FROM et WHERE

Imaginons une table orders contenant l’identifiant de la commande, la ville, le statut et le montant. SELECT choisit les colonnes à afficher, FROM indique la table consultée et WHERE conserve seulement les lignes qui respectent une condition.

La requête suivante cherche les commandes payées d’au moins 100 €. Le tri place les montants les plus élevés en premier afin de faciliter le contrôle visuel.

  • Les textes sont placés entre apostrophes.
  • Les nombres sont comparés sans apostrophes.
  • AND exige que les deux conditions soient vraies.
  • ORDER BY modifie l’ordre d’affichage, pas les données stockées.
Commandes payées d’au moins 100 €
SELECT order_id, city, amount
FROM orders
WHERE status = 'paid'
  AND amount >= 100
ORDER BY amount DESC;

Calculer un indicateur avec GROUP BY

Une question d’analyse demande souvent de regrouper plusieurs lignes. Pour connaître le chiffre d’affaires payé par ville, SQL additionne les montants avec SUM et crée un groupe par ville.

Chaque colonne affichée qui n’est pas agrégée doit généralement apparaître dans GROUP BY. Le filtre reste appliqué avant le calcul : une commande annulée ne contribue pas au chiffre d’affaires.

Chiffre d’affaires payé par ville
SELECT
  city,
  SUM(amount) AS revenue
FROM orders
WHERE status = 'paid'
GROUP BY city
ORDER BY revenue DESC;
Contrôle utile : comparez la somme des revenus par ville au total des commandes payées. Les deux montants doivent être identiques.

Relier les tables avec JOIN

Le nom du client appartient à la table customers, tandis que le montant appartient à orders. Une jointure reconstitue la relation grâce à une clé commune, ici customer_id.

La requête suivante calcule le montant payé par client. INNER JOIN conserve uniquement les commandes associées à un client existant. Avant d’agréger, vérifiez que la jointure ne multiplie pas les lignes de manière inattendue.

Total payé par client
SELECT
  c.customer_id,
  c.full_name,
  SUM(o.amount) AS total_paid
FROM customers AS c
INNER JOIN orders AS o
  ON o.customer_id = c.customer_id
WHERE o.status = 'paid'
GROUP BY c.customer_id, c.full_name
ORDER BY total_paid DESC;

Dans quel ordre apprendre SQL ?

Une progression efficace alterne une notion courte et une pratique immédiate. Commencez par interroger une table, puis ajoutez les agrégations et les jointures. Les CTE et fonctions fenêtre deviennent utiles lorsque ces fondations sont stables.

Ne mesurez pas votre niveau au nombre de mots-clés mémorisés. Mesurez-le à votre capacité à expliquer le résultat, repérer une erreur de périmètre et adapter une requête à une nouvelle question.

  • Étape 1 : SELECT, WHERE, ORDER BY et valeurs NULL.
  • Étape 2 : COUNT, SUM, AVG, GROUP BY et HAVING.
  • Étape 3 : INNER JOIN, LEFT JOIN et contrôle de la granularité.
  • Étape 4 : sous-requêtes, CTE, CASE et fonctions fenêtre.
  • Étape 5 : projets métier et optimisation des requêtes.

Les erreurs qui ralentissent les débutants

Copier une solution sans prédire son résultat donne une impression de vitesse, mais construit peu d’autonomie. Faites une première tentative, lisez le message d’erreur, puis utilisez un indice ciblé avant d’afficher la correction.

Les erreurs les plus coûteuses ne sont pas toujours syntaxiques. Une jointure sur la mauvaise clé, un filtre placé trop tard ou un comptage sur la mauvaise granularité peuvent produire un chiffre crédible mais incorrect.

  • Utiliser SELECT * sans savoir quelles colonnes sont nécessaires.
  • Confondre WHERE, qui filtre les lignes, et HAVING, qui filtre les groupes.
  • Oublier que NULL se teste avec IS NULL ou IS NOT NULL.
  • Faire confiance au résultat sans contrôler quelques lignes et un total.

Transformez ce guide en pratique

Si vous partez de zéro, suivez le parcours débutant dans l’ordre et exécutez chaque exemple. Si vous avez déjà écrit quelques requêtes, le test de niveau vous indiquera les compétences à consolider. Le catalogue d’exercices permet ensuite de travailler une notion précise.

Construisez des bases solides.

Suivez SQL Fondations pour progresser du premier tableau à une analyse contrôlée.

Voir SQL Fondations