Le langage SQL (Structured Query Language) est un outil polyvalent permettant de gérer et d’interroger des données dans des bases de données relationnelles. Si les requêtes SQL de base sont essentielles, les requêtes SQL avancées permettent de passer à la vitesse supérieure en matière de manipulation et d’analyse des données. Dans ce guide, nous allons explorer les 10 principales requêtes SQL avancées avec des exemples de code pratiques.
1. CTE récursif (Common Table Expressions)
Requête : Récupérer tous les salariés et leurs responsables dans une structure hiérarchique à l’aide d’un CTE récursif.
WITH RECURSIVE EmployeeHierarchy AS ( SELECT employee_id, employee_name, manager_id FROM employees WHERE manager_id IS NULL UNION ALL SELECT e.employee_id, e.employee_name, e.manager_id FROM employees e JOIN EmployeeHierarchy eh ON e.manager_id = eh.employee_id ) SELECT * FROM EmployeeHierarchy;
2. Pivot Data
Requête : Pivote la table sales
pour afficher les catégories de produits en colonnes et les ventes totales pour chaque mois.
SELECT * FROM ( SELECT TO_CHAR(order_date, 'YYYY-MM') AS month, product_category, sales_amount FROM sales ) AS pivoted PIVOT ( SUM(sales_amount) FOR product_category IN ('Electronics', 'Clothing', 'Books') ) AS pivoted_sales;
3. Fonctions Window
Requête : Calculer le total courant des ventes par date de commande.
SELECT order_date, sales_amount, SUM(sales_amount) OVER (ORDER BY order_date) AS running_total FROM sales
4. Ranking avec des fonctions Window
Requête : Classer les employés en fonction de leur salaire au sein de chaque département.
SELECT department, employee_name, salary, RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS salary_rank FROM employees;
5. Trouver des lacunes dans les données séquentielles
Requête : Identifier les numéros d’ordre manquants dans une séquence.
WITH Sequences AS ( SELECT MIN(order_number) AS start_seq, MAX(order_number) AS end_seq FROM orders ) SELECT start_seq + 1 AS missing_sequence FROM Sequences WHERE NOT EXISTS ( SELECT 1 FROM orders o WHERE o.order_number = Sequences.start_seq + 1 )
6. Unpivot Data
Requête : Dissocier les données d’une table comportant plusieurs colonnes représentant différents attributs.
SELECT product_id, attribute_name, attribute_value FROM products UNPIVOT ( attribute_value FOR attribute_name IN (color, size, weight) ) AS unpivoted_data;
7. Recherche d’événements consécutifs
Requête : Identifier les dates de commande consécutives pour un même produit
WITH ConsecutiveOrders AS ( SELECT product_id, order_date, LAG(order_date) OVER (PARTITION BY product_id ORDER BY order_date) AS prev_order_date FROM orders ) SELECT product_id, order_date, prev_order_date FROM ConsecutiveOrders WHERE order_date - prev_order_date = 1;
8. Agrégation avec la clause FILTER
Requête : Calculer le salaire moyen des employés du département des ventes.
SELECT department, AVG(salary) FILTER (WHERE department = 'Sales') AS avg_salary_sales FROM employees GROUP BY department
9. Extraction de données JSON
Requête : Extraire des données d’une colonne JSON.
SELECT order_id, customer_id, order_details ->> 'product' AS product_name, CAST(order_details ->> 'quantity' AS INTEGER) AS quantity FROM orders;
10. Création et utilisation de tables temporaires
Requête : Créer une table temporaire pour stocker les résultats intermédiaires et la joindre à d’autres tables.
-- Créer une table temporaire CREATE TEMPORARY TABLE temp_product_sales AS SELECT product_id, SUM(sales_amount) AS total_sales FROM sales GROUP BY product_id; -- Joindre d'autres tables SELECT p.product_name, t.total_sales FROM products p JOIN temp_product_sales t ON p.product_id = t.product_id;
Conclusion
Les requêtes SQL avancées te permettent de t’attaquer à des tâches d’analyse de données complexes et de résoudre des problèmes de manipulation de données complexes. En maîtrisant ces requêtes, tu seras bien équipé pour traiter un large éventail de tâches liées aux données et prendre des décisions plus éclairées sur la base de tes données.
Au fur et à mesure que tu travailleras avec SQL et les bases de données relationnelles, la pratique et l’application régulières de ces requêtes avancées t’aideront à consolider ton expertise et à améliorer tes capacités d’analyse des données.
Fondamentaux SQL
Merci de ta lecture et de ton intérêt ! 🚀
Tu trouveras encore plus de contenu dans notre programme Bootcamp SQL 💫