Ce Module 7 est un coffre à outils SQL : il te permettra de faire plein de petites manipulations efficaces sans avoir besoin de passer par du code Python ou Excel. Ce sont souvent ces fonctions qui rendent une requête propre, claire et exploitable !
🧩 Module 7 – Manipulations & Expressions utiles#
🎯 Objectifs#
À la fin du module, tu sauras :
- Utiliser
COALESCE
,NULLIF
,IF
/CASE
pour gérer les valeurs conditionnelles - Combiner des chaînes de caractères (
CONCAT
,||
,TRIM
,SUBSTRING
) - Naviguer dans les lignes (
LAG
,LEAD
, cf. module 5) - Faire des calculs conditionnels sans
GROUP BY
🧪 1. Gestion des NULL
: COALESCE
, NULLIF
, IS NULL
#
🔹 COALESCE(...)
: retourne la première valeur non nulle#
SELECT COALESCE(email, telephone, 'Aucune info') AS contact
FROM clients;
➡️ Très utile pour gérer des champs manquants
🔹 NULLIF(a, b)
: renvoie NULL
si a = b
#
SELECT NULLIF(montant, 0) AS montant_util
FROM ventes;
➡️ Pratique pour éviter les divisions par zéro (1 / NULLIF(x, 0)
)
🪢 2. Concaténation de chaînes (CONCAT
, ||
)#
🔹 CONCAT(...)
(ou ||
selon SGBD)#
SELECT CONCAT(prenom, ' ', nom) AS nom_complet
FROM utilisateurs;
ou (dans PostgreSQL, SQLite…) :
SELECT prenom || ' ' || nom AS nom_complet
FROM utilisateurs;
🔹 Fonctions associées#
TRIM()
: retire les espacesUPPER()
/LOWER()
: majuscules / minusculesSUBSTRING(champ FROM 1 FOR 3)
ouSUBSTR(champ, 1, 3)
🧭 3. Expressions conditionnelles : CASE
, IF
#
🔹 CASE WHEN ... THEN ... ELSE ... END
#
SELECT
CASE
WHEN montant >= 1000 THEN 'premium'
WHEN montant >= 500 THEN 'standard'
ELSE 'basique'
END AS categorie
FROM commandes;
➡️ Puissant pour créer des variables catégorielles à partir de règles
🔁 4. Rappels : LAG
, LEAD
, FIRST_VALUE
(cf. module 5)#
Ces fonctions sont parfaites pour manipuler des historiques :
SELECT
date,
montant,
montant - LAG(montant) OVER (ORDER BY date) AS evolution
FROM ventes;
🎲 5. Manipulations diverses#
Fonction | Usage | Exemple |
---|---|---|
ROUND(valeur, 2) | Arrondir | ROUND(prix, 2) |
CAST(x AS INTEGER) | Convertir un type | CAST('123' AS INTEGER) |
GREATEST(a, b) / LEAST(a, b) | Max / Min entre colonnes | GREATEST(prix_ht, prix_remise) |
🏋️♂️ 6. Exercices#
Exo 1 – Concaténer prénom et nom, en mettant le résultat en majuscules#
Exo 2 – Créer une variable niveau_client
selon le montant total des commandes#
Exo 3 – Utiliser COALESCE
pour combler les adresses mail manquantes par un champ téléphone#
Exo 4 – Calculer la différence de montant entre chaque ligne et la précédente (LAG
)#
🧰 7. Exemple DuckDB (Python)#
duckdb.sql("""
SELECT *,
COALESCE(email, telephone, 'Aucun contact') AS contact_util,
UPPER(CONCAT(prenom, ' ', nom)) AS identite,
montant - LAG(montant) OVER (ORDER BY date_commande) AS evolution
FROM clients;
""").df()