SQLDébutant

Requêtes SQL essentielles

18 mars 2026 6 min SQL

Introduction : Qu’est-ce que SQL ?

SQL (Structured Query Language) est le langage universel pour interroger et manipuler des bases de données relationnelles. Que vous travailliez avec MySQL, PostgreSQL, SQL Server ou SQLite, la syntaxe de base reste identique.

SQL permet de :

  • Créer et structurer des bases de données
  • Insérer, modifier et supprimer des données
  • Rechercher et filtrer des informations
  • Agréger et analyser des données (sommes, moyennes, comptages)

Dans ce tutoriel, nous allons couvrir les requêtes SQL essentielles que tout développeur doit maîtriser : SELECT, INSERT, UPDATE, DELETE, JOIN, et les fonctions d’agrégation.

Prérequis

  • Accès à une base de données SQL (MySQL, PostgreSQL, SQLite)
  • Ou utilisez un outil en ligne : SQLite Online
  • Aucune connaissance préalable en SQL requise

Étape 1 : Créer une table

Commençons par créer une table utilisateurs :

CREATE TABLE utilisateurs (
  id INT PRIMARY KEY AUTO_INCREMENT,
  nom VARCHAR(100) NOT NULL,
  email VARCHAR(150) UNIQUE NOT NULL,
  age INT,
  ville VARCHAR(100),
  date_inscription DATE DEFAULT CURRENT_DATE
);

Explication :

  • id INT PRIMARY KEY AUTO_INCREMENT : identifiant unique qui s’incrémente automatiquement
  • VARCHAR(100) : chaîne de caractères de 100 caractères max
  • NOT NULL : le champ est obligatoire
  • UNIQUE : pas de doublons autorisés
  • DEFAULT CURRENT_DATE : valeur par défaut = date du jour

Étape 2 : INSERT – Insérer des données

INSERT INTO utilisateurs (nom, email, age, ville) VALUES
('Alice Dupont', 'alice@example.com', 28, 'Paris'),
('Bob Martin', 'bob@example.com', 35, 'Lyon'),
('Charlie Durand', 'charlie@example.com', 22, 'Marseille'),
('Diana Leclerc', 'diana@example.com', 30, 'Toulouse');

Insérer une seule ligne :

INSERT INTO utilisateurs (nom, email, age, ville)
VALUES ('Eve Moreau', 'eve@example.com', 26, 'Nantes');

Étape 3 : SELECT – Récupérer des données

Sélectionner toutes les colonnes

SELECT * FROM utilisateurs;

Sélectionner des colonnes spécifiques

SELECT nom, email FROM utilisateurs;

Filtrer avec WHERE

SELECT * FROM utilisateurs WHERE age > 25;

Opérateurs de comparaison :

  • = : égal
  • != ou <> : différent
  • >, <, >=, <= : supérieur, inférieur, etc.
  • LIKE : recherche de pattern (ex: LIKE '%Dupont')
  • IN : valeur dans une liste (ex: IN ('Paris', 'Lyon'))
  • BETWEEN : entre deux valeurs (ex: BETWEEN 20 AND 30)

Exemples de filtres

-- Utilisateurs de Paris
SELECT * FROM utilisateurs WHERE ville = 'Paris';

-- Nom commence par 'A'
SELECT * FROM utilisateurs WHERE nom LIKE 'A%';

-- Âge entre 25 et 35 ans
SELECT * FROM utilisateurs WHERE age BETWEEN 25 AND 35;

-- Villes Paris ou Lyon
SELECT * FROM utilisateurs WHERE ville IN ('Paris', 'Lyon');

Étape 4 : ORDER BY – Trier les résultats

-- Tri par âge croissant
SELECT * FROM utilisateurs ORDER BY age ASC;

-- Tri par âge décroissant
SELECT * FROM utilisateurs ORDER BY age DESC;

-- Tri multiple : ville (A-Z), puis âge (décroissant)
SELECT * FROM utilisateurs ORDER BY ville ASC, age DESC;

Étape 5 : LIMIT – Limiter le nombre de résultats

-- Les 3 utilisateurs les plus jeunes
SELECT * FROM utilisateurs ORDER BY age ASC LIMIT 3;

-- Pagination : résultats 6 à 10
SELECT * FROM utilisateurs LIMIT 5 OFFSET 5;

Étape 6 : UPDATE – Modifier des données

-- Modifier l'âge d'Alice
UPDATE utilisateurs
SET age = 29
WHERE email = 'alice@example.com';

-- Modifier plusieurs colonnes
UPDATE utilisateurs
SET ville = 'Bordeaux', age = 40
WHERE nom = 'Bob Martin';

⚠️ ATTENTION : Toujours utiliser WHERE dans un UPDATE, sinon TOUTES les lignes seront modifiées !

Étape 7 : DELETE – Supprimer des données

-- Supprimer un utilisateur
DELETE FROM utilisateurs WHERE email = 'eve@example.com';

-- Supprimer tous les utilisateurs de plus de 35 ans
DELETE FROM utilisateurs WHERE age > 35;

⚠️ DANGER : DELETE FROM utilisateurs; (sans WHERE) supprime TOUTES les lignes !

Étape 8 : Fonctions d’agrégation

COUNT – Compter les lignes

-- Nombre total d'utilisateurs
SELECT COUNT(*) FROM utilisateurs;

-- Nombre d'utilisateurs de Paris
SELECT COUNT(*) FROM utilisateurs WHERE ville = 'Paris';

AVG – Moyenne

-- Âge moyen
SELECT AVG(age) AS age_moyen FROM utilisateurs;

SUM – Somme

-- Somme des âges (peu utile ici, mais pratique pour des montants, quantités, etc.)
SELECT SUM(age) FROM utilisateurs;

MIN / MAX – Minimum / Maximum

-- Âge le plus jeune
SELECT MIN(age) FROM utilisateurs;

-- Âge le plus vieux
SELECT MAX(age) FROM utilisateurs;

Étape 9 : GROUP BY – Regrouper les données

-- Nombre d'utilisateurs par ville
SELECT ville, COUNT(*) AS total
FROM utilisateurs
GROUP BY ville;

-- Âge moyen par ville
SELECT ville, AVG(age) AS age_moyen
FROM utilisateurs
GROUP BY ville;

HAVING – Filtrer après regroupement

-- Villes avec plus de 2 utilisateurs
SELECT ville, COUNT(*) AS total
FROM utilisateurs
GROUP BY ville
HAVING COUNT(*) > 2;

Différence WHERE vs HAVING :

  • WHERE filtre AVANT le regroupement
  • HAVING filtre APRÈS le regroupement

Étape 10 : JOIN – Joindre plusieurs tables

Créons une table commandes :

CREATE TABLE commandes (
  id INT PRIMARY KEY AUTO_INCREMENT,
  utilisateur_id INT,
  produit VARCHAR(100),
  montant DECIMAL(10,2),
  FOREIGN KEY (utilisateur_id) REFERENCES utilisateurs(id)
);

INSERT INTO commandes (utilisateur_id, produit, montant) VALUES
(1, 'Ordinateur', 1200.00),
(1, 'Souris', 25.00),
(2, 'Clavier', 80.00),
(3, 'Écran', 350.00);

INNER JOIN

-- Afficher les commandes avec le nom de l'utilisateur
SELECT utilisateurs.nom, commandes.produit, commandes.montant
FROM commandes
INNER JOIN utilisateurs ON commandes.utilisateur_id = utilisateurs.id;

LEFT JOIN

-- Tous les utilisateurs, même ceux sans commande
SELECT utilisateurs.nom, commandes.produit
FROM utilisateurs
LEFT JOIN commandes ON utilisateurs.id = commandes.utilisateur_id;

Différence INNER vs LEFT :

  • INNER JOIN : uniquement les lignes qui matchent dans les deux tables
  • LEFT JOIN : toutes les lignes de la table de gauche, même si pas de correspondance

Erreurs courantes

❌ Syntax error near WHERE

Cause : Virgule en trop, mot-clé mal orthographié.

Solution : Relisez attentivement la syntaxe, vérifiez les virgules et parenthèses.

❌ Column ‘xyz’ not found

Cause : Nom de colonne incorrect ou table mal spécifiée.

Solution : Vérifiez le nom exact des colonnes avec DESCRIBE nom_table;

❌ Oubli du WHERE dans UPDATE/DELETE

Cause : Modification ou suppression de TOUTES les lignes par erreur.

Solution : Toujours tester avec SELECT avant d’exécuter UPDATE ou DELETE.

Résultat attendu

À la fin de ce tutoriel, vous maîtrisez :

  • ✅ CREATE TABLE : créer des tables
  • ✅ INSERT : ajouter des données
  • ✅ SELECT : récupérer et filtrer
  • ✅ UPDATE : modifier
  • ✅ DELETE : supprimer
  • ✅ Fonctions d’agrégation (COUNT, AVG, SUM, MIN, MAX)
  • ✅ GROUP BY / HAVING : regrouper et filtrer
  • ✅ JOIN : combiner plusieurs tables

Prochaines étapes

  1. Transactions : BEGIN, COMMIT, ROLLBACK
  2. Index : optimiser les performances
  3. Sous-requêtes : requêtes imbriquées
  4. Vues : créer des requêtes réutilisables
  5. Stored Procedures : fonctions SQL personnalisées

Conclusion

SQL est LE langage des bases de données. Ces requêtes essentielles sont utilisées quotidiennement par des millions de développeurs. Pratiquez sur des datasets réels (Kaggle, OpenData), créez des projets concrets, et vous maîtriserez rapidement SQL. C’est une compétence indispensable, quel que soit votre langage de programmation ! 🗄️