All guides
IntermediateSelf-pacedFree GuideSection 22/95

SQL — SELECT, WHERE et filtres

Practise development foundations: programming, web, APIs, data and AI tools. Work through sections and exercises to build your first projects.

The full lessons for this course are currently available in French. Use the section menu to navigate the French course.

💡

Free content, available without an account. Tools and models change: use the current model guide to check their versions. Models and 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;
Quick Check

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

Quick Check

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

Your progress

Progress is self-reported and stored in your browser. The final completion record is not a qualification or an independent assessment.

View progress and completion record

Learn AI, from prompts to agents

15 free guidesQuizzes, diagrams and workshopsNo account needed

One practical AI workflow in your inbox

Methods, resources and new exercises. Free, unsubscribe at any time.