SQL les bases du Single Query Language

Apprendre les bases du SQL : un guide complet pour bien démarrer

stat4decision Mis à jour le : 2 juillet 2025 méthode Leave a Comment

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 :

  1. Mise en place : bases de données et dialectes SQL
  2. Commandes de base
  3. Jointures entre tables
  4. Fonctions avancées : agrégation, sous-requêtes, fenêtres
  5. Optimisation des performances
  6. 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 :

SGBDCas d’usage principalRemarques techniques
PostgreSQLAnalyse, Data Science, back-endOpen source, robuste
MySQL / MariaDBSites web, CMSLéger, facile à déployer
SQLiteApplications locales ou mobilesFonctionne sans serveur
SQL ServerEntreprise, Microsoft BITrès intégré à Excel, Power BI
OracleSystèmes critiques, ERPLicence 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

idnomville
1AliceParis
2LéoLyon

commandes

idclient_idmontant
101250
112180
121100

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émentTableVue
DonnéesStockées physiquementGénérées à la volée
ModificationsINSERT/UPDATE possibleLecture seule (sauf exceptions)
PerformancesTrès rapidesDépendent de la requête sous-jacente
Cas d’usageStockageSimplification, 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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.