Le SQL (Structured Query Language) est le langage standard pour interagir avec des bases de données relationnelles. Il permet de lire, modifier, insérer, filtrer ou structurer des données, et constitue une compétence essentielle pour les professionnels de la donnée : analystes, développeurs, data scientists, ingénieurs BI ou utilisateurs métier.
Ce guide vous propose de détailler différents points liés à ce langage :
- Mise en place : bases de données et dialectes SQL
- Commandes de base
- Jointures entre tables
- Fonctions avancées : agrégation, sous-requêtes, fenêtres
- Optimisation des performances
- Tables et vues
1. Mise en place : environnement SQL
Types de bases de données relationnelles
Une base de données relationnelle stocke les données dans des tables à deux dimensions (lignes et colonnes), reliées entre elles par des clés primaires et étrangères.
Parmi les systèmes les plus utilisés :
SGBD | Cas d’usage principal | Remarques techniques |
---|---|---|
PostgreSQL | Analyse, Data Science, back-end | Open source, robuste |
MySQL / MariaDB | Sites web, CMS | Léger, facile à déployer |
SQLite | Applications locales ou mobiles | Fonctionne sans serveur |
SQL Server | Entreprise, Microsoft BI | Très intégré à Excel, Power BI |
Oracle | Systèmes critiques, ERP | Licence propriétaire, très performant |
Dialectes SQL
Chaque SGBD a son dialecte SQL : la base du langage est commune, mais certaines fonctions ou syntaxes peuvent varier :
- PostgreSQL : PL/pgSQL
- SQL Server : T-SQL
- Oracle : PL/SQL
- MySQL : SQL natif
Comment exécuter du SQL ?
Plusieurs outils permettent d’interagir avec une base SQL :
- Interfaces graphiques : pgAdmin, DBeaver, SQL Server Management Studio
- Ligne de commande SQL
- Connecteurs dans Python (via
psycopg2
,sqlalchemy
) ou R - Outils de BI : Power BI, Tableau, Looker Studio
2. Commandes fondamentales
Lecture des données : SELECT
SELECT nom, ville FROM clients;
Permet d’extraire certaines colonnes d’une table.
Filtrer les résultats : WHERE
SELECT * FROM commandes
WHERE montant > 100 AND statut = 'validée';
Permet de filtrer les lignes selon une condition.
Trier les résultats : ORDER BY
SELECT * FROM produits
ORDER BY prix DESC;
Affiche les résultats triés (ici du plus cher au moins cher).
Limiter le nombre de résultats : LIMIT
SELECT * FROM produits
LIMIT 10;
Affiche les 10 premières lignes.
Renommer des colonnes : AS
SELECT nom AS client, ville AS localisation FROM clients;
Renomme les colonnes dans le résultat affiché.
3. Les jointures
Les jointures permettent de relier des tables entre elles pour croiser l’information. C’est une des forces majeures de SQL.
Exemple de tables
clients
id | nom | ville |
---|---|---|
1 | Alice | Paris |
2 | Léo | Lyon |
commandes
id | client_id | montant |
---|---|---|
10 | 1 | 250 |
11 | 2 | 180 |
12 | 1 | 100 |
INNER JOIN
: correspondances strictes
SELECT c.nom, o.montant
FROM clients c
INNER JOIN commandes o ON c.id = o.client_id;
Renvoie uniquement les clients ayant passé une commande.
LEFT JOIN
: tout à gauche
SELECT c.nom, o.montant
FROM clients c
LEFT JOIN commandes o ON c.id = o.client_id;
Renvoie tous les clients, même ceux sans commande (montant = NULL).
FULL OUTER JOIN
: tout partout
SELECT c.nom, o.montant
FROM clients c
FULL OUTER JOIN commandes o ON c.id = o.client_id;
Renvoie toutes les lignes, même sans correspondance d’un côté ou de l’autre.
CROSS JOIN
: produit cartésien
SELECT c.nom, o.id
FROM clients c
CROSS JOIN commandes o;
Renvoie toutes les combinaisons possibles (clients × commandes).
4. Requêtes avancées
Agrégation : GROUP BY
, SUM
, COUNT
, AVG
SELECT client_id, COUNT(*) AS nb_commandes, SUM(montant) AS total
FROM commandes
GROUP BY client_id;
Permet de regrouper les lignes et calculer des statistiques.
Filtrage après regroupement : HAVING
SELECT client_id, SUM(montant) AS total
FROM commandes
GROUP BY client_id
HAVING total > 300;
Filtre les groupes après agrégation (contrairement à WHERE
).
Sous-requêtes
SELECT nom FROM clients
WHERE id IN (
SELECT client_id FROM commandes WHERE montant > 200
);
Filtre les clients qui ont passé une commande supérieure à 200.
Fonctions de fenêtre
Les fonctions de fenêtre permettent de faire des calculs sur des groupes de lignes sans les agréger.
SELECT client_id, montant,
RANK() OVER (PARTITION BY client_id ORDER BY montant DESC) AS rang
FROM commandes;
Classe les commandes par client.
SELECT client_id, date_commande, montant,
SUM(montant) OVER (PARTITION BY client_id ORDER BY date_commande) AS cumul
FROM commandes;
Affiche un cumul progressif par client.
Fonctions disponibles : ROW_NUMBER()
, RANK()
, DENSE_RANK()
, LAG()
, LEAD()
, NTILE()
, SUM()
, AVG()
avec OVER(...)
.
5. Optimisation et performances
Les index
Un index est une structure de données qui accélère la recherche. Comparable à l’index d’un livre, il permet d’éviter un parcours complet de la table (table scan).
CREATE INDEX idx_client_id ON commandes(client_id);
Cela améliore les performances sur les JOIN
, WHERE
, GROUP BY
, ORDER BY
.
Types d’index
- Simple : sur une seule colonne
- Composite : sur plusieurs colonnes
- Unique : empêche les doublons
- Partiel : filtré selon une condition (PostgreSQL)
Quand ajouter un index ?
- Sur les colonnes de jointure
- Sur les colonnes de tri et de groupement
- Sur les colonnes très filtrées
Trop d’index ralentissent les écritures (INSERT, UPDATE) car ils doivent être mis à jour.
EXPLAIN
et EXPLAIN ANALYZE
Ces commandes permettent de comprendre comment une requête est exécutée.
EXPLAIN SELECT * FROM commandes WHERE montant > 500;
Retourne le plan d’exécution : table scan, index utilisé, tri nécessaire, etc.
EXPLAIN ANALYZE SELECT * FROM commandes WHERE montant > 500;
Retourne le plan d’exécution avec les temps réels.
6. Tables et vues
Les tables
Structure principale pour stocker des données. Chaque ligne est persistante.
CREATE TABLE clients (
id SERIAL PRIMARY KEY,
nom VARCHAR(100),
ville VARCHAR(100),
date_inscription DATE
);
Les vues
Une vue est une requête enregistrée qui se comporte comme une table virtuelle. Elle ne stocke pas les données, mais les affiche dynamiquement.
CREATE VIEW clients_parisiens AS
SELECT id, nom FROM clients WHERE ville = 'Paris';
Permet de masquer des jointures complexes ou de structurer l’accès aux données.
Vues matérialisées
Certaines bases (PostgreSQL notamment) permettent de créer des vues dont les résultats sont stockés.
CREATE MATERIALIZED VIEW top_clients AS
SELECT client_id, SUM(montant) AS total
FROM commandes
GROUP BY client_id;
Pour mettre à jour :
REFRESH MATERIALIZED VIEW top_clients;
Résumé : table vs vue
Élément | Table | Vue |
---|---|---|
Données | Stockées physiquement | Générées à la volée |
Modifications | INSERT/UPDATE possible | Lecture seule (sauf exceptions) |
Performances | Très rapides | Dépendent de la requête sous-jacente |
Cas d’usage | Stockage | Simplification, abstraction |
7. Aller plus loin avec la formation SQL
Cette introduction couvre les bases indispensables du SQL, mais pour aller plus loin, Stat4decision vous propose une formation SQL complète :
- En 2 jours, en distanciel ou présentiel
- Maîtrise des requêtes complexes, jointures multiples, fonctions de fenêtre
- Optimisation et bonnes pratiques avec EXPLAIN et indexes
- Applications concrètes pour l’analyse de données et la BI
Voir le programme complet :
https://www.stat4decision.com/fr/formations/formation-sql/
Partager cet article