Aller au contenu

Module 7 : Manipulations & Expressions utiles

·3 mins·
SQL Formation
SQL - Cet article fait partie d'une série.
Partie 7: Cet article

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 espaces
  • UPPER() / LOWER() : majuscules / minuscules
  • SUBSTRING(champ FROM 1 FOR 3) ou SUBSTR(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
#

FonctionUsageExemple
ROUND(valeur, 2)ArrondirROUND(prix, 2)
CAST(x AS INTEGER)Convertir un typeCAST('123' AS INTEGER)
GREATEST(a, b) / LEAST(a, b)Max / Min entre colonnesGREATEST(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()

📚 8. Ressources utiles
#

Thibault Clément - Intechnia
Auteur
Thibault Clément - Intechnia
Data scientist
SQL - Cet article fait partie d'une série.
Partie 7: Cet article