Sommaire
- SQL débutant : maîtriser les requêtes essentielles pour bien démarrer
- La base de données exemple
- SELECT : lire des données
- WHERE : filtrer les résultats
- ORDER BY et LIMIT : trier et limiter
- JOIN : croiser les tables
- GROUP BY et fonctions d’agrégation
- INSERT : ajouter des données
- UPDATE : modifier des données
- DELETE : supprimer des données
- Ordre d’exécution d’une requête SQL
- Cas pratique complet : tableau de bord BTS SIO
- Ressources pour aller plus loin
- Conclusion
SQL débutant : maîtriser les requêtes essentielles pour bien démarrer
SQL débutant est la recherche que tout étudiant en informatique tape un jour ou l’autre. Et pour cause : le SQL (Structured Query Language) reste en 2026 le langage incontournable pour interroger, manipuler et gérer des bases de données relationnelles. Que tu prépares un BTS SIO SLAM, que tu sois en reconversion ou simplement curieux, impossible d’y échapper. MySQL, PostgreSQL, MariaDB, SQL Server… tous ces systèmes parlent le même langage de base. La bonne nouvelle, c’est que les fondamentaux s’apprennent vite. En quelques heures, tu seras capable d’écrire des requêtes SELECT, filtrer avec WHERE, croiser des tables avec JOIN, regrouper des données avec GROUP BY, et modifier tes enregistrements avec INSERT, UPDATE et DELETE. Dans ce tutoriel, on passé en revue chaque requête essentielle avec des exemples concrets inspirés des projets BTS SIO. Prêt à écrire ta première requête ? C’est parti.
La base de données exemple

Avant de plonger dans les requêtes, créons une petite base de données réaliste. On va travailler avec un cas classique en BTS SIO SLAM : une application de gestion de tickets d’intervention.
Trois tables suffisent pour couvrir toutes les requêtes essentielles :
CREATE TABLE utilisateur (
id INT PRIMARY KEY AUTO_INCREMENT,
nom VARCHAR(50) NOT NULL,
prenom VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
rôle VARCHAR(20) DEFAULT 'technicien',
date_creation DATE
);
CREATE TABLE catégorie (
id INT PRIMARY KEY AUTO_INCREMENT,
libelle VARCHAR(50) NOT NULL
);
CREATE TABLE ticket (
id INT PRIMARY KEY AUTO_INCREMENT,
titre VARCHAR(100) NOT NULL,
description TEXT,
statut VARCHAR(20) DEFAULT 'ouvert',
priorité INT DEFAULT 3,
id_utilisateur INT,
id_categorie INT,
date_ouverture DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (id_utilisateur) REFERENCES utilisateur(id),
FOREIGN KEY (id_categorie) REFERENCES catégorie(id)
);
On insèrera des données au fil des exemples. Garde ce schéma sous les yeux, il servira tout au long du tutoriel.
SELECT : lire des données
La requête SELECT est la première que tu apprendras et celle que tu utiliseras le plus souvent. Elle sert à récupérer des données depuis une ou plusieurs tables.
Sélectionner toutes les colonnes
SELECT * FROM utilisateur;
L’astérisque `*` signifie « toutes les colonnes ». Pratique pour explorer une table, mais à éviter en production : on préfère toujours nommer explicitement les colonnes nécessaires.
Sélectionner des colonnes précises
SELECT nom, prenom, email FROM utilisateur;
Cette écriture est plus performante et plus lisible. En contexte professionnel, c’est la norme.
Alias de colonnes
SELECT nom AS nom_famille, prenom AS prenom_usuel FROM utilisateur;
Le mot-clé `AS` permet de renommer temporairement une colonne dans le résultat. Très utile pour clarifier les sorties, surtout avec des calculs.
WHERE : filtrer les résultats

Sans filtre, une requête SELECT renvoie toutes les lignes de la table. La clause WHERE permet de poser des conditions pour ne récupérer que les données pertinentes.
Filtres simples
SELECT * FROM ticket WHERE statut = 'ouvert';
SELECT * FROM ticket WHERE priorité <= 2;
SELECT * FROM utilisateur WHERE rôle != 'admin';
Combiner des conditions : AND, OR, NOT
SELECT * FROM ticket
WHERE statut = 'ouvert' AND priorité = 1;
SELECT * FROM ticket
WHERE statut = 'ferme' OR statut = 'resolu';
SELECT * FROM utilisateur
WHERE NOT rôle = 'admin';
Opérateurs utiles : LIKE, IN, BETWEEN, IS NULL
-- Recherche partielle avec LIKE
SELECT * FROM utilisateur WHERE email LIKE '%@gmail.com';
-- Liste de valeurs avec IN
SELECT * FROM ticket WHERE statut IN ('ouvert', 'en_cours');
-- Plage de valeurs avec BETWEEN
SELECT * FROM ticket WHERE priorité BETWEEN 1 AND 3;
-- Vérifier les valeurs NULL
SELECT * FROM ticket WHERE id_utilisateur IS NULL;
ORDER BY et LIMIT : trier et limiter
Trier les résultats
-- Tri croissant (par défaut)
SELECT * FROM ticket ORDER BY date_ouverture ASC;
-- Tri décroissant
SELECT * FROM ticket ORDER BY priorité DESC;
-- Tri sur plusieurs colonnes
SELECT * FROM ticket ORDER BY priorité ASC, date_ouverture DESC;
Limiter le nombre de résultats
-- Les 5 tickets les plus récents
SELECT * FROM ticket ORDER BY date_ouverture DESC LIMIT 5;
-- Pagination : sauter les 10 premiers, prendre les 10 suivants
SELECT * FROM ticket ORDER BY id LIMIT 10 OFFSET 10;
La combinaison ORDER BY + LIMIT est extrêmement courante dans les applications web pour gérer la pagination.
JOIN : croiser les tables
Les jointures sont le cœur du SQL relationnel. Elles permettent de combiner les données de plusieurs tables grâce aux clés étrangères.
INNER JOIN : la jointure classique
L’INNER JOIN retourne uniquement les lignes qui ont une correspondance dans les deux tables.
SELECT ticket.titre, ticket.statut, utilisateur.nom, utilisateur.prenom
FROM ticket
INNER JOIN utilisateur ON ticket.id_utilisateur = utilisateur.id;
Résultat : seuls les tickets assignés à un utilisateur existant apparaissent. Les tickets sans utilisateur sont exclus.
LEFT JOIN : garder toutes les lignes de gauche
SELECT ticket.titre, ticket.statut, utilisateur.nom
FROM ticket
LEFT JOIN utilisateur ON ticket.id_utilisateur = utilisateur.id;
Cette fois, tous les tickets apparaissent. Ceux qui n’ont pas d’utilisateur assigné affichent NULL dans la colonne `nom`.
Jointure multiple
On peut enchaîner les jointures pour croiser plus de deux tables :
SELECT t.titre, t.statut, u.nom, u.prenom, c.libelle AS catégorie
FROM ticket t
INNER JOIN utilisateur u ON t.id_utilisateur = u.id
INNER JOIN catégorie c ON t.id_categorie = c.id
WHERE t.statut = 'ouvert'
ORDER BY t.priorité ASC;
Ici, on utilisé des alias de tables (`t`, `u`, `c`) pour raccourcir l’écriture. C’est une pratique standard dès qu’on travaille avec plusieurs tables.
Récapitulatif des jointures
| Type de JOIN | Comportement | Cas d’usage |
|---|---|---|
| INNER JOIN | Lignes avec correspondance dans les deux tables | Afficher des données liées qui existent des deux côtés |
| LEFT JOIN | Toutes les lignes de la table de gauche | Lister des éléments même sans correspondance |
| RIGHT JOIN | Toutes les lignes de la table de droite | Moins courant, souvent remplacé par un LEFT JOIN inversé |
| CROSS JOIN | Produit cartésien (toutes les combinaisons) | Générer des combinaisons, rarement utilisé |
GROUP BY et fonctions d’agrégation
GROUP BY regroupe les lignes partageant une même valeur et permet d’appliquer des fonctions de calcul sur chaque groupe.
Les fonctions d’agrégation principales
-- Compter le nombre de tickets par statut
SELECT statut, COUNT(*) AS nombre
FROM ticket
GROUP BY statut;
-- Priorité moyenne par catégorie
SELECT id_categorie, AVG(priorité) AS priorite_moyenne
FROM ticket
GROUP BY id_categorie;
-- Autres fonctions utiles
SELECT MIN(date_ouverture) AS premier_ticket,
MAX(date_ouverture) AS dernier_ticket,
COUNT(*) AS total
FROM ticket;
HAVING : filtrer après regroupement
WHERE filtre avant le regroupement, HAVING filtre après.
-- Catégories avec plus de 5 tickets ouverts
SELECT id_categorie, COUNT(*) AS nb_tickets
FROM ticket
WHERE statut = 'ouvert'
GROUP BY id_categorie
HAVING COUNT(*) > 5;
Combiner GROUP BY et JOIN
Voici une requête complète typique d’un projet BTS SIO :
SELECT u.nom, u.prenom, COUNT(t.id) AS tickets_assignes,
AVG(t.priorité) AS priorite_moyenne
FROM utilisateur u
LEFT JOIN ticket t ON u.id = t.id_utilisateur
GROUP BY u.id, u.nom, u.prenom
HAVING COUNT(t.id) > 0
ORDER BY tickets_assignes DESC;
Cette requête affiche les techniciens triés par nombre de tickets assignés. Le type de requête qu’on retrouve dans un tableau de bord.
INSERT : ajouter des données
La requête INSERT permet d’ajouter de nouveaux enregistrements dans une table.
Insérer une ligne
INSERT INTO utilisateur (nom, prenom, email, rôle, date_creation)
VALUES ('Durand', 'Marie', '[email protected]', 'technicien', '2026-03-15');
Insérer plusieurs lignes
INSERT INTO catégorie (libelle) VALUES
('Réseau'),
('Logiciel'),
('Matériel'),
('Sécurité');
INSERT avec sous-requête
INSERT INTO ticket (titre, statut, id_utilisateur)
SELECT 'Ticket auto', 'ouvert', id
FROM utilisateur
WHERE rôle = 'technicien';
Cette syntaxe avancée crée un ticket pour chaque technicien. Pratique pour des scripts d’initialisation.
UPDATE : modifier des données
-- Modifier un enregistrement précis
UPDATE ticket SET statut = 'en_cours' WHERE id = 42;
-- Modifier plusieurs colonnes
UPDATE ticket
SET statut = 'resolu', priorité = 5
WHERE id = 42;
-- Modifier plusieurs lignes selon une condition
UPDATE ticket SET priorité = 1
WHERE statut = 'ouvert' AND date_ouverture < '2026-01-01';
DELETE : supprimer des données
-- Supprimer un enregistrement
DELETE FROM ticket WHERE id = 42;
-- Supprimer selon une condition
DELETE FROM ticket WHERE statut = 'ferme' AND date_ouverture < '2025-01-01';
-- Vider une table entièrement (attention !)
DELETE FROM ticket;
Pour vider complètement une table, `TRUNCATE TABLE ticket;` est plus rapide que DELETE car il ne journalise pas chaque suppression individuelle.
Ordre d’exécution d’une requête SQL
Comprendre l’ordre dans lequel SQL exécute les clauses évite beaucoup d’erreurs. Ce n’est pas l’ordre d’écriture :
| Ordre d’exécution | Clause | Rôle |
|---|---|---|
| 1 | FROM / JOIN | Identifier les tables sources |
| 2 | WHERE | Filtrer les lignes |
| 3 | GROUP BY | Regrouper les lignes |
| 4 | HAVING | Filtrer les groupes |
| 5 | SELECT | Choisir les colonnes |
| 6 | ORDER BY | Trier les résultats |
| 7 | LIMIT | Limiter le nombre de lignes |
C’est pour ça qu’on ne peut pas utiliser un alias défini dans SELECT à l’intérieur d’un WHERE : le WHERE s’exécute avant le SELECT.
Cas pratique complet : tableau de bord BTS SIO
Mettons tout ensemble avec un scénario réaliste. Tu développes un tableau de bord pour une application de gestion de tickets. Voici les requêtes dont tu auras besoin :
-- 1. Nombre de tickets ouverts par catégorie
SELECT c.libelle, COUNT(t.id) AS nb_ouverts
FROM catégorie c
LEFT JOIN ticket t ON c.id = t.id_categorie AND t.statut = 'ouvert'
GROUP BY c.id, c.libelle
ORDER BY nb_ouverts DESC;
-- 2. Top 3 des techniciens les plus actifs ce mois
SELECT u.nom, u.prenom, COUNT(t.id) AS nb_tickets
FROM utilisateur u
INNER JOIN ticket t ON u.id = t.id_utilisateur
WHERE t.date_ouverture >= '2026-03-01'
GROUP BY u.id, u.nom, u.prenom
ORDER BY nb_tickets DESC
LIMIT 3;
-- 3. Tickets urgents non assignés
SELECT t.id, t.titre, c.libelle AS catégorie, t.date_ouverture
FROM ticket t
LEFT JOIN catégorie c ON t.id_categorie = c.id
WHERE t.priorité = 1 AND t.id_utilisateur IS NULL
ORDER BY t.date_ouverture ASC;
Ces trois requêtes combinent SELECT, JOIN, WHERE, GROUP BY, ORDER BY et LIMIT. Si tu les comprends, tu maîtrises les fondamentaux du SQL débutant.
Ressources pour aller plus loin
Pour pratiquer régulièrement, voici des ressources fiables et gratuites :
– Documentation officielle MySQL pour la référence complète des commandes
– SQLZoo pour des exercices interactifs progressifs
– W3Schools SQL Tutorial pour des exemples rapides à tester en ligne
En BTS SIO SLAM, le SQL est évalué à l’épreuve E4. Tu seras amené à écrire des requêtes sur papier et à les implémenter dans tes projets. Plus tu pratiques maintenant, plus tu seras à l’aise le jour J.
Conclusion
Tu connais maintenant les requêtes SQL essentielles : SELECT, WHERE, JOIN, GROUP BY, INSERT, UPDATE et DELETE. Ces sept commandes couvrent la grande majorité des besoins en développement web et en gestion de bases de données. La clé pour progresser, c’est la pratique régulière. Installé un environnement local, crée tes propres tables, invente des cas d’usage et écris des requêtes. En BTS SIO SLAM comme en reconversion informatique, le SQL est un fondamental qui t’ouvrira les portes du développement comme de la cybersécurité. Lance-toi, une requête à la fois.
Questions fréquentes
Faut-il apprendre SQL en 2026 ou c’est dépassé ?
SQL reste absolument incontournable en 2026. Toutes les applications web, mobiles et métier utilisent des bases de données relationnelles. Les offres d’emploi en développement, data ou cybersécurité demandent systématiquement des compétences SQL. Ce n’est pas prêt de changer.
Ces trois systèmes sont des SGBD (Systèmes de Gestion de Bases de Données) qui utilisent tous le langage SQL standard. Les différences portent sur des fonctionnalités avancées, la syntaxe de certaines fonctions spécifiques et les licences. Pour un débutant, les requêtes de base sont identiques partout.Quelle différence entre MySQL, PostgreSQL et SQL Server ?
Plusieurs plateformes proposent des cours SQL gratuits et interactifs. SQLZoo et W3Schools sont parfaits pour débuter. DB Fiddle permet de tester des requêtes directement dans le navigateur. En complément, la documentation officielle de MySQL ou PostgreSQL est une référence complète et gratuite.Où apprendre SQL gratuitement en ligne ?
Pour l’épreuve E4 du BTS SIO SLAM, tu dois maîtriser SELECT, WHERE, JOIN (INNER et LEFT), GROUP BY avec HAVING, ORDER BY, LIMIT, INSERT, UPDATE et DELETE. Les sous-requêtes et les vues sont aussi au programme mais moins fréquentes dans les sujets d’examen.Quelles requêtes SQL faut-il connaître pour le BTS SIO SLAM ?
WHERE filtre les lignes individuelles avant le regroupement (GROUP BY), tandis que HAVING filtre les groupes après le regroupement. Concrètement, on utilisé WHERE pour des conditions sur les données brutes et HAVING pour des conditions sur les résultats de fonctions d’agrégation comme COUNT ou AVG.Quelle est la différence entre WHERE et HAVING en SQL ?
À retenir
- SQL débutant : maîtriser les requêtes essentielles pour bien démarrer
- La base de données exemple
- SELECT : lire des données
- WHERE : filtrer les résultats
- ORDER BY et LIMIT : trier et limiter
Formatrice IT indépendante depuis 2016, ancienne étudiante BTS SIO SLAM. 6 ans d'expérience en entreprise.