Retour au blog

10 Exercices Corrigés sur les Bases de Données SQL : SELECT, JOIN et Agrégation

Tu veux savoir comment extraire des informations pertinentes d'une base de données massive ? Apprends à jongler avec les tables et les fonctions SQL.

Cet article a été rédigé à des fins pédagogiques. Les informations présentées peuvent évoluer. Nous t’invitons à vérifier auprès de sources officielles.

Niveau : Moyen — Durée estimée : 75 min — 10 exercices avec corrections détaillées

Rappel des notions clés

Le langage SQL (Structured Query Language) est l'outil standard pour interagir avec les bases de données relationnelles. La commande fondamentale est le SELECT, qui permet d'extraire des données de colonnes spécifiques d'une table.

Lorsque les données sont réparties sur plusieurs tables, on utilise les jointures. La plus courante, INNER JOIN, retourne les enregistrements qui ont des valeurs correspondantes dans les deux tables. Enfin, l'agrégation (avec GROUP BY) permet d'effectuer des calculs sur des groupes de lignes, comme calculer une moyenne ou compter des éléments.

L'ordre des clauses est crucial : SELECT -> FROM -> JOIN -> WHERE -> GROUP BY -> HAVING -> ORDER BY. Respecter cet ordre est la clé pour éviter les erreurs de syntaxe.

Structure type : SELECT colonne, COUNT() FROM table JOIN table2 ON table.id = table2.ref GROUP BY colonne HAVING COUNT() > 1

Exercices — Niveau Facile

Exercice 1 : Écris une requête SQL pour sélectionner le nom et l'email de tous les clients de la table Clients qui habitent à "Paris".

Correction :

1. Utilise SELECT pour spécifier les colonnes : nom, email.

2. Utilise FROM pour désigner la table : Clients.

3. Utilise WHERE pour filtrer par ville.

Requête : SELECT nom, email FROM Clients WHERE ville = 'Paris';

Exercice 2 : Trouve tous les produits de la table Produits dont le prix est strictement supérieur à 50 euros et trie-les par prix décroissant.

Correction :

1. On sélectionne toutes les colonnes avec *.

2. Filtre de prix : WHERE prix > 50.

3. Tri : ORDER BY prix DESC.

Requête : SELECT * FROM Produits WHERE prix > 50 ORDER BY prix DESC;

Exercice 3 : Compte le nombre total de commandes passées présentes dans la table Commandes.

Correction :

1. On utilise la fonction d'agrégation COUNT().

Requête : SELECT COUNT(*) FROM Commandes;

Exercices — Niveau Moyen

Exercice 4 : Affiche le nom des clients et la date de leurs commandes en joignant les tables Clients et Commandes (clé commune : client_id).

Correction :

1. On utilise INNER JOIN pour lier les deux tables.

2. On définit la condition de jointure avec ON.

Requête : SELECT Clients.nom, Commandes.date_commande FROM Clients INNER JOIN Commandes ON Clients.id = Commandes.client_id;

Exercice 5 : Calcule le montant total des ventes par catégorie de produit. Utilise les tables Produits et Ventes.

Correction :

1. Joindre Produits et Ventes sur produit_id.

2. Grouper par catégorie : GROUP BY categorie.

3. Sommer les prix : SUM(prix).

Requête : SELECT categorie, SUM(prix) FROM Produits JOIN Ventes ON Produits.id = Ventes.produit_id GROUP BY categorie;

Exercice 6 : Affiche les catégories qui ont plus de 10 produits référencés.

Correction :

1. On groupe par catégorie.

2. On compte avec COUNT().

3. Pour filtrer sur un résultat d'agrégation, on utilise HAVING et non WHERE.

Requête : SELECT categorie FROM Produits GROUP BY categorie HAVING COUNT() > 10;

Exercices — Niveau Difficile

Exercice 7 : Liste les clients qui n'ont jamais passé de commande. Utilise une LEFT JOIN entre Clients et Commandes.

Correction :

1. On fait une LEFT JOIN pour garder tous les clients, même ceux sans commande.

2. S'il n'y a pas de commande, la colonne commande_id sera NULL.

Requête : SELECT Clients.nom FROM Clients LEFT JOIN Commandes ON Clients.id = Commandes.client_id WHERE Commandes.id IS NULL;

Exercice 8 : Trouve le prix moyen des produits pour chaque fournisseur, mais n'affiche que les fournisseurs dont la moyenne est supérieure à 100.

Correction :

1. SELECT fournisseur, AVG(prix).

2. GROUP BY fournisseur.

3. HAVING AVG(prix) > 100.

Requête : SELECT fournisseur, AVG(prix) FROM Produits GROUP BY fournisseur HAVING AVG(prix) > 100;

Exercice 9 : Affiche le nom du client qui a dépensé le plus d'argent au total.

Correction :

1. Joindre Clients et Commandes.

2. Grouper par nom de client.

3. Sommer les montants : SUM(montant) AS total_depense.

4. Trier par total_depense DESC et limiter à 1.

Requête : SELECT nom, SUM(montant) FROM Clients JOIN Commandes ON Clients.id = Commandes.client_id GROUP BY nom ORDER BY SUM(montant) DESC LIMIT 1;

Exercice 10 : Écris une requête pour trouver les produits dont le prix est supérieur à la moyenne de tous les produits (sous-requête).

Correction :

1. On calcule d'abord la moyenne globale : (SELECT AVG(prix) FROM Produits).

2. On utilise ce résultat dans le WHERE de la requête principale.

Requête : SELECT nom FROM Produits WHERE prix > (SELECT AVG(prix) FROM Produits);

Bilan et conseils

Ce qu'il faut retenir : La maîtrise du SQL passe par la compréhension des jointures (INNER vs LEFT) et l'usage correct de GROUP BY. Attention à ne pas confondre WHERE (filtre les lignes) et HAVING (filtre les groupes).

Comment ORBITECH Peut T'aider

ORBITECH AI Academy met à ta disposition des outils concrets pour réviser plus efficacement et progresser à ton rythme.

Tous ces outils sont disponibles sur ta plateforme ORBITECH. Connecte-toi et explore ceux qui correspondent le mieux à tes besoins !

Contenu en libre diffusion — partage autorisé sous réserve de mentionner ORBITECH AI Academy comme source.

COMMENCE DÈS MAINTENANT

Rejoins ORBITECH et accède à des cours, exercices et quiz personnalisés.

Commencer gratuitement
🌍 ORBITECH AI Academy — Free education in 88 languages for 171 countries