Comment écrire une requête SQL : tutoriel pratique avec exemples
Comment écrire une requête SQL : tutoriel pratique avec exemples
Le langage SQL (Structured Query Language) est la méthode universelle pour communiquer avec les bases de données relationnelles, mais écrire une requête efficace va bien au-delà d’un simple enchaînement de mots-clés. C’est un processus qui allie logique, compréhension claire de vos données et connaissance du fonctionnement des bases de données. Ce tutoriel vous donnera les compétences nécessaires pour rédiger des requêtes SQL non seulement correctes, mais aussi efficaces, lisibles et maintenables, quel que soit votre système de base de données.
Ce que vous allez apprendre
À la fin de ce guide, vous serez capable de construire des requêtes SQL de A à Z, en filtrant, triant et regroupant les données avec précision. Vous comprendrez l’importance de l’ordre d’exécution des requêtes et repartirez avec un plan clair pour rédiger des instructions SQL complexes qui constituent un atout professionnel. Écrire une requête SQL est un processus structuré où les clauses sont rédigées dans un ordre spécifique, différent de celui suivi par le moteur de base de données pour les exécuter.
Les bases : l’instruction SELECT
Au cœur de la récupération des données se trouve l’instruction SELECT. Elle indique à la base de données exactement quelles informations vous souhaitez voir et où les trouver. La forme la plus élémentaire d’une requête se compose des clauses SELECT et FROM.
SELECT colonne1, colonne2
FROM nom_table;
Par exemple, pour récupérer les clés et les noms des employés depuis une table de dimension, vous utiliseriez :
SELECT EmployeeKey, LastName
FROM DimEmployee;
Bien que SELECT * puisse être tentant pour visualiser rapidement toutes les colonnes, cette pratique est largement déconseillée en code de production, car elle peut renvoyer des données inutiles, nuire aux performances et casser les applications si le schéma de la table change. Spécifiez toujours les colonnes dont vous avez besoin.
Construire la logique avec la clause WHERE
Pour filtrer les données et ne récupérer que les lignes pertinentes, on utilise la clause WHERE. Elle spécifie la condition de recherche que les lignes doivent satisfaire pour être incluses dans les résultats. La clause WHERE vient après la clause FROM dans la structure de votre requête.
Vous pouvez utiliser divers opérateurs pour construire des conditions de recherche puissantes. Par exemple, pour trouver un employé spécifique nommé « Smith », vous pouvez utiliser une simple comparaison d’égalité :
SELECT EmployeeKey, LastName
FROM DimEmployee
WHERE LastName = 'Smith';
Pour des filtres plus complexes, vous pouvez utiliser l’opérateur LIKE pour la correspondance de motifs. La requête suivante trouve tous les employés dont le nom de famille contient le motif « Smi » :
SELECT EmployeeKey, LastName
FROM DimEmployee
WHERE LastName LIKE '%Smi%';
Les opérateurs logiques comme AND et OR vous permettent de combiner plusieurs conditions. Vous pouvez utiliser AND pour garantir que toutes les conditions doivent être remplies, et OR lorsqu’une condition quelconque peut être vraie. Par exemple, pour trouver des lignes répondant à plusieurs critères, vous pourriez écrire :
SELECT EmployeeKey, LastName
FROM DimEmployee
WHERE EmployeeKey <= 500
AND LastName LIKE '%Smi%';
Il est important de noter que la clause WHERE filtre les lignes individuelles et ne peut pas filtrer les résultats d’agrégation. L’opérateur IN est une manière concise de vérifier si une valeur correspond à l’une des valeurs d’une liste, et BETWEEN est utilisé pour trouver des valeurs comprises dans un intervalle.
-- Utilisation de IN
SELECT EmployeeKey, LastName
FROM DimEmployee
WHERE LastName IN ('Smith', 'Godfrey', 'Johnson');
-- Utilisation de BETWEEN
SELECT EmployeeKey, LastName
FROM DimEmployee
WHERE EmployeeKey BETWEEN 100 AND 200;
D’après la documentation Microsoft, il n’y a pas de limite au nombre de prédicats que vous pouvez inclure dans une condition de recherche, ce qui permet une logique de filtrage très spécifique et complexe.
Mise en forme et organisation de vos résultats
Après avoir filtré vos données, vous souhaitez souvent les organiser pour une meilleure lisibilité ou effectuer des calculs. La clause ORDER BY trie le jeu de résultats en fonction d’une ou plusieurs colonnes. Elle suit l’instruction SELECT et peut spécifier un ordre croissant (ASC, par défaut) ou décroissant (DESC). Pour supprimer les lignes en double de votre jeu de résultats, vous utilisez le mot-clé DISTINCT juste après SELECT.
SELECT DISTINCT JobTitle
FROM HumanResources.Employee
ORDER BY JobTitle;
La clause GROUP BY est un outil puissant pour l’agrégation de données. Elle regroupe les lignes ayant les mêmes valeurs dans les colonnes spécifiées, ce qui permet d’effectuer des opérations de synthèse comme SUM, AVG, COUNT, MAX et MIN. Par exemple, pour trouver le total de chaque commande client, vous pouvez regrouper par SalesOrderID et additionner les totaux de ligne :
SELECT SalesOrderID,
SUM(LineTotal) AS SubTotal
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
ORDER BY SalesOrderID;
Lorsque vous souhaitez filtrer les résultats d’un GROUP BY, vous devez utiliser la clause HAVING. Contrairement à la clause WHERE, qui filtre les lignes individuelles avant le regroupement, HAVING filtre les groupes après l’agrégation.
SELECT ProductID
FROM Sales.SalesOrderDetail
GROUP BY ProductID
HAVING AVG(OrderQty) > 5;
L’ordre dans lequel vous écrivez ces clauses est crucial. Une requête SQL standard suit cette structure : SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY.
Techniques avancées : jointures et sous-requêtes
Les données sont souvent stockées dans plusieurs tables, et on les rassemble à l’aide de clauses JOIN. Une INNER JOIN récupère les enregistrements de deux tables lorsque la condition de jointure est remplie. Par exemple, vous pouvez combiner la table Product avec SalesOrderDetail pour obtenir des informations sur les produits accompagnées des données de vente.
Les sous-requêtes, ou requêtes imbriquées, sont des requêtes à l’intérieur d’une autre requête. Elles sont utiles pour la manipulation et l’analyse de données qui dépendent des résultats d’une autre opération. Une sous-requête corrélée est un type particulièrement complexe où la requête interne dépend de la requête externe pour ses valeurs, s’exécutant de manière répétée pour chaque ligne traitée. Le mot-clé EXISTS est souvent utilisé avec les sous-requêtes corrélées pour tester l’existence de lignes dans une sous-requête.
Écrire du SQL lisible
Écrire du SQL qui fonctionne n’est que la moitié du travail ; écrire du SQL maintenable est une nécessité professionnelle. Suivez ces bonnes pratiques pour garantir que vos requêtes sont un outil de collaboration, et non une source de confusion :
- Mettez les mots-clés en majuscules : Utilisez des majuscules pour les mots-clés SQL comme
SELECT,FROM,WHEREetJOIN. Cela les distingue des noms de colonnes et de tables, rendant la requête plus facile à parcourir. - Utilisez des sauts de ligne et des indentations : Placez chaque clause principale sur une nouvelle ligne et utilisez l’indentation pour montrer la structure des sous-requêtes ou des jointures. Cette hiérarchie visuelle clarifie la logique complexe.
- Ajoutez des commentaires pertinents : Utilisez
--pour ajouter des commentaires qui expliquent le pourquoi de votre requête, et non le quoi. C’est inestimable pour vous-même à l’avenir et pour vos collègues. - Utilisez des alias descriptifs : Lorsque vous renommez des colonnes avec
ASou que vous raccourcissez des noms de tables, choisissez des alias qui ont du sens. Évitez les noms vagues commet1oua.
Sources
- WHERE (Transact-SQL) - SQL Server
- T-SQL Tutorial: Write Transact-SQL Statements
- SELECT Examples (Transact-SQL)
- PostgreSQL: Documentation: 17: 2.5. Querying a Table
- Data Management with SQL for Ecologists: Accessing Data With Queries
- EXISTS (Transact-SQL) - SQL Server
- Transact-SQL Syntax Conventions (Transact-SQL)
- How to Write SQL Queries Anyone Can Understand
— Editorial Team
Aucun commentaire pour le moment.