Étapes pour réfléchir et construire une requête SQL
Créer une requête SQL efficace et compréhensible nécessite une approche structurée et réfléchie.
Voici une méthodologie détaillée pour vous guider à travers le processus, accompagnée d’exemples et d’exercices pratiques.
Reprenons nos table ventes
et produits
pour appliquer la méthode suivante.
Télécharger le fichier de la base de données
Table: produits
id (clé primaire) |
product_name |
price |
category |
1 |
Smartphone |
699 |
Electronics |
2 |
Laptop |
999 |
Electronics |
3 |
Office Chair |
150 |
Furniture |
4 |
Desk Lamp |
40 |
Furniture |
Table: ventes
sale_id |
product_id (clé étrangère) |
quantity |
sale_date |
1 |
1 |
3 |
2024-11-01 |
2 |
2 |
1 |
2024-11-02 |
3 |
3 |
5 |
2024-11-03 |
4 |
1 |
2 |
2024-11-04 |
1. Comprendre la demande
- Posez-vous les bonnes questions : Que cherchez-vous à savoir ? (la requête)
- Quels résultats souhaitez-vous obtenir (colonnes ou résultats de calculs) ? le SELECT
- Quels critères ou filtres doivent être appliqués ? Le WHERE
- Les données doivent-elles être agrégées ou comparées ? Groupe By, Having
Exemple de requête : "Quels produits ont généré un revenu total supérieur à 1000 € ?"
2. Identifier les sources de données
- Quelles tables sont nécessaires ?
- Identifiez où se trouvent les données pertinentes : La table
ventes
contient les ventes avec quantity et product_id.
- Étudiez les relations entre les tables (clés primaires et étrangères) : La table
produits
contient le prix des produits et a une colonne en commun avec la table ventes
3. Décomposer la demande en sous-étapes à l'aide de questions
Commencez par les éléments de base avant d’ajouter des niveaux de complexité.
Répondez à ces questions pour structurer votre réflexion :
- Quoi ? Quels informations (colonnes ou données) vous souhaitez afficher en résultat ?
- (Exemple : product_id, total_revenue)
- Où ? Quelle table contient les informations de base ? (Exemple : sales, products)
- Commencez par une requête simple pour récupérer les données pertinentes et les afficher.
- Comment ? Quels critères de filtrage appliquer ?
- Utilisez WHERE pour restreindre les résultats.
- Est-il nécessaire d’agréger ou de grouper les données ? (filtres, regroupements, calculs)
- Utilisez GROUP BY pour regrouper des résultats.
- Utilisez SUM, AVG... pour calculer sur des regroupements.
- Utilisez HAVING pour filtrer sur des regroupements. (ex : total_revenue > 1000)
- Les données doivent-elles être jointes ?
- Ajoutez des jointures si plusieurs tables sont impliquées.
- Pourquoi ? Quel est le but ? Faut-il trier ou limiter les résultats ? (Exemple : Identifier les produits rentables)
- Utilisez ORDER BY et LIMIT.
4. Construire la requête étape par étape
Prenez le temps d’ajouter chaque partie de la requête, en testant au fur et à mesure.
Requête : "Quels produits ont généré un revenu total supérieur à 1000 € ?"
- Etape 1 : Lister les ventes avec leur quantité et la clé produit :
SELECT product_id, quantity
FROM sales;
- Etape 2 : Joindre les ventes avec le prix des produits :
SELECT s.product_id, s.quantity, p.price
FROM sales AS s
JOIN products AS p ON s.product_id = p.id;
- Etape 3 : Calculer le total de chaque vente :
SELECT s.product_id, s.quantity * p.price AS total_vente
FROM sales AS s
JOIN products AS p ON s.product_id = p.id;
- Etape 4 : Regrouper par clé produit et faire la somme du total des ventes :
SELECT s.product_id, SUM(s.quantity * p.price) AS total_revenue
FROM sales AS s
JOIN products AS p ON s.product_id = p.id
GROUP BY s.product_id;
- Etape 5 : Ajouter un filtre pour les produits générant plus de 1000 € :
SELECT s.product_id, SUM(s.quantity * p.price) AS total_revenue
FROM sales AS s
JOIN products AS p ON s.product_id = p.id
GROUP BY s.product_id
HAVING total_revenue > 1000;
Mise en pratique
Exercice 1
Question : "Quelles sont les ventes effectuées pour chaque produit ?"
- Quoi ? Quelles données faudra t'il afficher : product_id et additionner (SUM) les quantités (quantity).
- Où ? Dans quelle table se trouvent les données : ventes
- Comment ? regroupement par product_id : Groupe By
Exercice 2
Question : "Quels clients ont dépensé plus de 500 € ?"
Décomposition :
- Quoi ? Listez les ventes par client (sales.client_id et sales.quantity).
- Où ? Ajoutez le prix des produits avec une jointure (products.price).
- Comment ? Calculez le total dépensé par client (SUM).
- Pourquoi ? Filtrez les clients ayant dépensé plus de 500 € (HAVING).
Conseils pour bien débuter
- Commencez simple : Écrivez une requête basique et ajoutez des couches progressivement.
- Posez-vous toujours les 4 questions clés : Quoi, Où, Comment, Pourquoi ?
- Décomposez la demande : Travaillez chaque étape indépendamment.
- Testez fréquemment : Vérifiez chaque étape avec des résultats intermédiaires.