Ce chapitre est gratuit
Pas besoin de compte pour le lire. Decouvre le contenu et decide si le programme est fait pour toi.
Voir les autres chapitresTu consultes ton compte en banque, tu commandes en ligne, tu scrolles un fil d’actualités — chacune de ces actions interroge une base de données. Et le langage pour parler à ces bases, c’est SQL.
🎯 Objectif : Comprendre ce qu’est une base de données relationnelle, maîtriser les types de données, et écrire tes premières requêtes SELECT et WHERE sur des données réalistes.
C’est quoi SQL et pourquoi l’apprendre ?
SQL (Structured Query Language) existe depuis 1974 et n’a jamais été remplacé. C’est le langage universel pour interagir avec les bases de données relationnelles. DevOps, développement, data engineering, SRE — tu croiseras SQL partout.
L’analogie la plus simple : imagine une bibliothèque avec 50 000 livres. Tu ne vas pas fouiller un par un. Tu demandes au bibliothécaire : “Je veux les livres de science-fiction publiés après 2020, triés par note.” SQL, c’est cette langue — précise, logique, et presque lisible comme de l’anglais.
SELECT * FROM livres
WHERE genre = 'science-fiction' AND annee > 2020
ORDER BY note DESC;
💡 SQL est dans le top 3 des compétences tech les plus demandées. Peu importe ton rôle — si tu travailles avec des données, tu as besoin de SQL.
Les bases de données relationnelles
Une base de données relationnelle stocke les données dans des tables reliées entre elles. Chaque table ressemble à un tableau : les lignes sont des enregistrements, les colonnes sont des attributs.
Exemple concret — une table servers qu’un DevOps utiliserait :
| server_id | hostname | ip_address | environment | cpu_cores | ram_gb | status |
|---|---|---|---|---|---|---|
| 1 | web-01 | 10.0.1.10 | production | 4 | 16 | running |
| 2 | web-02 | 10.0.1.11 | production | 4 | 16 | running |
| 3 | db-01 | 10.0.1.20 | production | 8 | 32 | running |
| 4 | dev-01 | 10.0.2.10 | development | 2 | 8 | stopped |
| 5 | staging-01 | 10.0.3.10 | staging | 4 | 16 | running |
Le server_id est la clé primaire — un identifiant unique pour chaque ligne. Sans clé primaire, impossible de distinguer deux enregistrements.
Les SGBD les plus utilisés
Un SGBD (Système de Gestion de Base de Données) est le logiciel qui gère le stockage et l’accès aux données. Les principaux :
- PostgreSQL — Open source, robuste, le plus recommandé pour apprendre et pour la production
- MySQL / MariaDB — Très répandu dans le web (WordPress, Magento)
- SQLite — Embarqué dans un fichier, zéro serveur à installer — parfait pour débuter
- SQL Server / Oracle — Monde entreprise, licences coûteuses
🔥 Pour cette série, on utilise PostgreSQL. C’est le plus conforme au standard SQL, et c’est celui que tu retrouveras le plus en entreprise DevOps.
Les propriétés ACID
Les bases relationnelles garantissent quatre propriétés fondamentales pour chaque transaction :
- Atomicité — La transaction s’exécute en totalité ou pas du tout. Pas de demi-virement bancaire.
- Cohérence — La base passe d’un état valide à un autre état valide.
- Isolation — Les transactions concurrentes ne s’interfèrent pas.
- Durabilité — Une fois validée, la transaction persiste même après un crash serveur.
⚠️ C’est pour ça que les bases SQL dominent le monde transactionnel. Quand tu as besoin de garanties fortes sur tes données (finance, inventaire, commandes), SQL + ACID, c’est le standard.
Types de données SQL
Chaque colonne a un type qui contraint les valeurs acceptées. Les essentiels :
| Type SQL | Usage | Exemple |
|---|---|---|
INTEGER | Nombres entiers | 42, -1 |
BIGINT | Entiers larges (IDs, timestamps) | 9223372036854775807 |
NUMERIC(p, s) | Décimaux exacts (montants) | NUMERIC(10,2) → 12345.67 |
VARCHAR(n) | Texte limité à n caractères | VARCHAR(255) |
TEXT | Texte illimité | Descriptions, logs |
BOOLEAN | Vrai / Faux | TRUE, FALSE |
DATE | Date seule | 2026-03-20 |
TIMESTAMP | Date + heure | 2026-03-20 14:30:00 |
JSONB | Données JSON (PostgreSQL) | {"key": "value"} |
💡 Utilise NUMERIC pour l’argent, jamais FLOAT. Les flottants introduisent des erreurs d’arrondi — 0.1 + 0.2 ≠ 0.3 en binaire. Avec NUMERIC(10,2), tes centimes restent exacts.
SELECT et WHERE : interroger les données
SELECT est la requête que tu écriras le plus souvent. Elle extrait des données d’une table.
Sélectionner des colonnes
-- Tout récupérer
SELECT * FROM servers;
-- Colonnes spécifiques
SELECT hostname, ip_address, status FROM servers;
-- Valeurs uniques d'une colonne
SELECT DISTINCT environment FROM servers;
-- Colonnes calculées avec alias
SELECT hostname,
cpu_cores,
ram_gb,
ram_gb / cpu_cores AS ram_per_core
FROM servers;
Filtrer avec WHERE
WHERE restreint les résultats selon des conditions. C’est là que SQL devient vraiment utile.
-- Serveurs en production
SELECT * FROM servers WHERE environment = 'production';
-- Serveurs avec plus de 4 CPUs et en running
SELECT * FROM servers
WHERE cpu_cores > 4 AND status = 'running';
-- Serveurs en staging OU development
SELECT * FROM servers
WHERE environment IN ('staging', 'development');
-- CPUs entre 4 et 8 (bornes incluses)
SELECT * FROM servers
WHERE cpu_cores BETWEEN 4 AND 8;
Recherche par motif avec LIKE
-- Hostname commençant par "web"
SELECT * FROM servers WHERE hostname LIKE 'web%';
-- Hostname contenant "01"
SELECT * FROM servers WHERE hostname LIKE '%01%';
Le % remplace n’importe quelle séquence de caractères, le _ remplace exactement un caractère.
Gérer les valeurs NULL
-- Serveurs sans IP assignée
SELECT * FROM servers WHERE ip_address IS NULL;
-- Serveurs avec une IP
SELECT * FROM servers WHERE ip_address IS NOT NULL;
⚠️ On ne peut pas écrire = NULL. En SQL, NULL n’est pas une valeur — c’est l’absence de valeur. Seuls IS NULL et IS NOT NULL fonctionnent.
Cas entreprise : inventaire d’infrastructure
Imagine que tu gères 200 serveurs répartis sur 3 environnements. Ton manager te demande un rapport rapide. Sans SQL, tu ouvres un tableur et tu filtres à la main. Avec SQL :
-- Combien de serveurs par environnement ?
SELECT environment, COUNT(*) AS total
FROM servers
GROUP BY environment;
-- Serveurs de production avec moins de 16 Go de RAM
SELECT hostname, ram_gb
FROM servers
WHERE environment = 'production' AND ram_gb < 16;
-- RAM totale allouée par environnement
SELECT environment,
SUM(ram_gb) AS total_ram,
SUM(cpu_cores) AS total_cpus
FROM servers
GROUP BY environment
ORDER BY total_ram DESC;
🎯 En une requête, tu obtiens ce qu’un tableur met 10 minutes à produire. Et surtout, ta requête est reproductible — tu la relances demain et elle donne le résultat à jour.
Pièges classiques du débutant
⚠️ Les erreurs que tout le monde fait :
- Oublier les guillemets simples — Les chaînes s’écrivent entre
'guillemets simples', pas doubles.WHERE status = "running"ne fonctionne pas en SQL standard. - Confondre
=etISpour NULL —WHERE ip = NULLne retourne jamais rien. C’estWHERE ip IS NULL. SELECT *en production — En apprentissage c’est pratique, mais en prod ça ramène toutes les colonnes. Sélectionne uniquement ce dont tu as besoin.- Oublier
ORDER BY— Sans tri explicite, SQL ne garantit aucun ordre. Les résultats peuvent changer d’une exécution à l’autre. - Confondre
VARCHARetTEXT— En PostgreSQL,TEXTest aussi performant queVARCHAR. UtiliseVARCHAR(n)uniquement si tu veux une contrainte de longueur.
💡 Installe PostgreSQL localement dès maintenant. Le plus simple : docker run -d --name pg -e POSTGRES_PASSWORD=secret -p 5432:5432 postgres:16. Puis connecte-toi avec docker exec -it pg psql -U postgres. Rien ne remplace la pratique.
Résumé
🔥 Ce qu’on a couvert : SQL est le langage universel des bases de données relationnelles. Les données sont organisées en tables avec des types stricts. SELECT extrait les données, WHERE les filtre, DISTINCT élimine les doublons, IN, BETWEEN et LIKE affinent les recherches. Les propriétés ACID garantissent la fiabilité des transactions.
Tu sais maintenant lire des données. Dans le prochain chapitre, on passe à l’écriture : INSERT, UPDATE, DELETE, et les premières requêtes de manipulation.
💡 À retenir : SQL se lit presque comme de l’anglais —
SELECT hostname FROM servers WHERE status = 'running'. Si tu comprends cette phrase, tu comprends SQL. Le reste, c’est de la pratique.
Série : Apprendre SQL
1 / 6Sur cette page
Articles liés
SELECT, INSERT, UPDATE : tes premières requêtes
Maîtrise ORDER BY, LIMIT, les fonctions d'agrégation (COUNT, SUM, AVG), GROUP BY et HAVING. Avec des exemples pratiques DevOps.
Les jointures : combiner les données
Maîtrise les jointures SQL (INNER, LEFT, RIGHT, FULL, CROSS JOIN) et les sous-requêtes pour combiner et croiser les données entre tables.
Administration : users, permissions, backup
CREATE, ALTER, DROP, INSERT, UPDATE, DELETE et contraintes SQL (PK, FK, UNIQUE, CHECK). Tout pour manipuler la structure et les données d'une base.