Tous les guides
IntermédiaireÀ votre rythmeGuide gratuitSection 22/95

SQL — SELECT, WHERE et filtres

Pratiquez les fondations du développement : programmation, web, API, données et usages de l’IA. Des sections et exercices pour construire vos premiers projets.

💡

Contenu gratuit, accessible sans compte. Les outils et modèles évoluent : consultez le dossier actuel pour vérifier leurs versions. Modèles et sources

Section 11.2.2 : SQL — SELECT, WHERE et filtres

🎯 Objectif pédagogique

Écrire des requêtes SQL pour lire et filtrer des données. Vous serez capable d'interroger une base de données pour extraire exactement les informations dont vous avez besoin — la compétence fondamentale de tout travail avec des données.


SQL — Le langage universel des données

Marc connaît les formules Excel : RECHERCHEV, FILTRE, SOMME.SI. SQL est la version pro et universelle de ces formules. C'est le langage que parlent TOUTES les bases de données relationnelles.

SQL (Structured Query Language) existe depuis 1974 — c'est l'un des langages les plus stables et durables de l'informatique.

SELECT — Récupérer des données

-- Tout sélectionner
SELECT * FROM users;

-- Colonnes spécifiques
SELECT name, email FROM users;

-- Alias
SELECT name AS nom, email AS courriel FROM users;

-- Valeurs uniques
SELECT DISTINCT status FROM applications;

WHERE — Filtrer les résultats

-- Égalité
SELECT * FROM applications WHERE status = 'interview';

-- Comparaisons
SELECT * FROM applications WHERE applied_date >= '2026-03-01';

-- LIKE (recherche partielle)
SELECT * FROM applications WHERE company LIKE '%Google%';
SELECT * FROM users WHERE email LIKE '%@gmail.com';

-- IN (liste de valeurs)
SELECT * FROM applications WHERE status IN ('interview', 'offer');

-- BETWEEN (intervalle)
SELECT * FROM applications WHERE applied_date BETWEEN '2026-01-01' AND '2026-03-31';

-- NULL
SELECT * FROM applications WHERE notes IS NULL;
SELECT * FROM applications WHERE notes IS NOT NULL;

-- Combinaisons (AND, OR, NOT)
SELECT * FROM applications 
WHERE status = 'interview' 
  AND applied_date >= '2026-03-01'
  AND company NOT LIKE '%GAFAM%';

ORDER BY — Trier les résultats

-- Tri croissant (défaut)
SELECT * FROM applications ORDER BY applied_date;

-- Tri décroissant
SELECT * FROM applications ORDER BY applied_date DESC;

-- Tri multiple
SELECT * FROM applications ORDER BY status ASC, applied_date DESC;

LIMIT — Limiter le nombre de résultats

-- Les 10 dernières candidatures
SELECT * FROM applications ORDER BY applied_date DESC LIMIT 10;

-- Pagination : page 2 (éléments 11-20)
SELECT * FROM applications ORDER BY id LIMIT 10 OFFSET 10;

Fonctions d'agrégation

-- Compter
SELECT COUNT(*) FROM applications;                          -- Total
SELECT COUNT(*) FROM applications WHERE status = 'offer';   -- Offres

-- Statistiques
SELECT MIN(applied_date) AS premiere, MAX(applied_date) AS derniere 
FROM applications;

-- GROUP BY (comme un tableau croisé dynamique)
SELECT status, COUNT(*) AS total 
FROM applications 
GROUP BY status
ORDER BY total DESC;
-- Résultat :
-- applied    | 15
-- interview  | 5
-- rejected   | 3
-- offer      | 2

-- HAVING (filtre sur les agrégats)
SELECT company, COUNT(*) AS nb_postes
FROM applications 
GROUP BY company
HAVING COUNT(*) >= 2;

SQL ≈ Excel sous stéroïdes

Marc fait le parallèle : SELECT = colonnes visibles dans le tableur. WHERE = filtre Excel. ORDER BY = tri. GROUP BY = tableau croisé dynamique. La différence : SQL traite des millions de lignes en millisecondes, là où Excel rame à 100 000 lignes.

🏋️ Exercice pratique (20 minutes)

Utilisez SQLite Online pour pratiquer :

-- Créer la table
CREATE TABLE applications (
  id INTEGER PRIMARY KEY,
  company TEXT NOT NULL,
  position TEXT NOT NULL,
  status TEXT DEFAULT 'applied',
  applied_date DATE,
  salary_min INTEGER,
  notes TEXT
);

-- Insérer des données
INSERT INTO applications (company, position, status, applied_date, salary_min) VALUES
('Google', 'Frontend Developer', 'interview', '2026-03-01', 75000),
('Meta', 'React Engineer', 'applied', '2026-03-05', 80000),
('Stripe', 'Full-Stack', 'offer', '2026-02-15', 70000),
('Datadog', 'Python Dev', 'rejected', '2026-02-01', 65000),
('OVH', 'DevOps Junior', 'applied', '2026-03-10', 45000),
('Vercel', 'Frontend', 'interview', '2026-03-12', 85000),
('Mistral AI', 'ML Engineer', 'applied', '2026-03-15', 90000),
('BNP Paribas', 'Data Analyst', 'interview', '2026-02-20', 55000),
('Doctolib', 'Backend Python', 'applied', '2026-03-08', 60000),
('Alan', 'Full-Stack JS', 'offer', '2026-01-20', 72000);

-- Exercices
-- 1. Toutes les candidatures en entretien
SELECT * FROM applications WHERE status = 'interview';

-- 2. Candidatures avec salaire > 70k, triées par salaire décroissant
SELECT company, position, salary_min FROM applications 
WHERE salary_min > 70000 ORDER BY salary_min DESC;

-- 3. Nombre de candidatures par statut
SELECT status, COUNT(*) FROM applications GROUP BY status;

-- 4. Les 3 dernières candidatures
SELECT * FROM applications ORDER BY applied_date DESC LIMIT 3;
Vérification rapide

Quelle requête retourne les candidatures chez Google OU Meta ?

Vérification rapide

Que fait GROUP BY status dans une requête SQL ?

Votre progression

Cette progression est déclarative et conservée dans votre navigateur. L’attestation finale ne constitue pas un diplôme ni une évaluation indépendante.

Voir ma progression et mon attestation

Apprendre l’IA, du premier prompt aux agents

15 guides gratuitsQuiz, schémas et ateliersSans compte

Un cas pratique IA dans votre boîte mail

Méthodes, ressources et nouveaux exercices. Gratuit, avec désinscription à tout moment.