Skip to content

Business SQL - Aide-mémo

Un guide de référence rapide pour les concepts clés du SQL, organisé par modules de cours.

1. 🔍 Bases du SQL

1.1 Bases de données : Des Classeurs Excel surpuissants

Comparaisons clés :

Terme ExcelTerme SQL/Base de données
Feuille/TableauTable
ColonneColonne/Champ
LigneEnregistrement
ClasseurBase de données

Pourquoi utiliser des bases de données ?

  • Gère des millions de lignes
  • Analyse plus rapide
  • Accès multi-utilisateurs
  • Meilleure intégrité des données

Tâches Excel vs SQL :

Tâche ExcelÉquivalent SQL
Filtrer des lignesClause WHERE
Sélectionner des colonnesInstruction SELECT
Trier des donnéesClause ORDER BY
Colonnes calculéesExpressions dans SELECT
Tableau croisé dynamiqueAgrégations avec GROUP BY

1.2 Votre Première Instruction SELECT

Syntaxe de base :

sql
SELECT * FROM table_name;

Points clés :

  • SELECT * récupère toutes les colonnes
  • FROM spécifie la table à interroger
  • Équivalent à ouvrir une feuille dans Excel

Exemple :

sql
SELECT * FROM sales;

Retourne :

SaleDateProductAmount
2024-05-01Apples120
2024-05-01Oranges80

1.3 Sélection de Colonnes Spécifiques

Syntaxe de base :

sql
SELECT column1, column2 FROM table_name;

Alias de colonnes :

sql
SELECT column1 AS alias1, column2 AS alias2 FROM table_name;

Points clés :

  • Lister les colonnes séparées par des virgules après SELECT
  • Utiliser AS pour renommer les colonnes dans les résultats
  • L'ordre des colonnes dans la requête détermine l'ordre de sortie

Exemples :

sql
SELECT Product, Amount FROM sales;

Retourne :

ProductAmount
Apples120
Oranges80
sql
SELECT Product AS Item, Amount AS Total FROM sales;

Retourne :

ItemTotal
Apples120
Oranges80

2. ⚙️ Filtrage des Données

2.1 WHERE : Le Filtre SQL

Syntaxe de base :

sql
SELECT columns FROM table_name
WHERE condition;

Opérateurs de comparaison :

OpérateurSignificationExemple
=ÉgalProduct = 'Apples'
<>DifférentProduct <> 'Oranges'
>Supérieur àAmount > 100
<Inférieur àAmount < 100
>=Supérieur ou égalAmount >= 100
<=Inférieur ou égalAmount <= 100

Gestion des NULL :

sql
WHERE column IS NULL
WHERE column IS NOT NULL

Exemple COALESCE :

sql
SELECT *, COALESCE(Amount, 0) AS Amount_Defaulted
FROM sales
WHERE COALESCE(Amount, 0) > 100;

Points clés :

  • WHERE filtre les lignes selon des conditions
  • Utiliser IS NULL/IS NOT NULL pour vérifier les NULL
  • COALESCE fournit des valeurs par défaut pour les NULL

2.2 Filtres Numériques et de Plage

Filtrage par plage :

sql
WHERE column BETWEEN value1 AND value2

Valeurs multiples :

sql
WHERE column IN (value1, value2, ...)

Combinaison de conditions :

sql
WHERE condition1 AND condition2
WHERE condition1 OR condition2

Exemples :

sql
SELECT * FROM sales
WHERE Amount BETWEEN 80 AND 120;
sql
SELECT * FROM sales
WHERE Product IN ('Apples', 'Oranges');
sql
SELECT * FROM sales
WHERE Product = 'Apples' AND Amount > 100;

Points clés :

  • BETWEEN inclut les deux extrémités
  • IN correspond à toute valeur de la liste
  • AND/OR combinent plusieurs conditions

2.3 Recherche de Texte avec LIKE

Correspondance de motif :

sql
WHERE column LIKE '%pattern%'

Caractères génériques :

  • % correspond à n'importe quel nombre de caractères
  • _ correspond à un seul caractère

Exemples :

sql
-- Contient "App"
WHERE Product LIKE '%App%'

-- Commence par "App"
WHERE Product LIKE 'App%'

-- Se termine par "es"
WHERE Product LIKE '%es'

-- Recherche insensible à la casse
WHERE LOWER(Product) LIKE '%app%'

Points clés :

  • LIKE permet une recherche flexible de motifs textuels
  • Similaire au filtre "contient" d'Excel
  • Utiliser LOWER() pour des recherches insensibles à la casse

2.4 Filtrage Multi-Conditions

Combinaison de conditions :

sql
WHERE condition1 AND condition2
WHERE condition1 OR condition2

Regroupement avec parenthèses :

sql
WHERE (condition1 AND condition2) OR condition3

Exemples :

sql
-- Exemple AND
WHERE Product = 'Apples' AND Amount > 100

-- Exemple OR
WHERE Product = 'Apples' OR Product = 'Oranges'

-- Groupement complexe
WHERE (Product = 'Apples' AND Amount > 100) OR Product = 'Oranges'

Erreurs courantes :

  • Utiliser = NULL au lieu de IS NULL
  • Oublier les parenthèses dans des conditions complexes
  • Oublier les guillemets autour des valeurs textuelles
  • Ignorer la sensibilité à la casse

Points clés :

  • Utiliser AND/OR pour combiner des conditions
  • Les parenthèses contrôlent l'ordre d'évaluation
  • Toujours utiliser IS NULL pour vérifier les NULL
  • Mettre entre guillemets les valeurs textuelles et considérer la sensibilité à la casse

3. 🔄 Transformation des Données

3.1 Tri avec ORDER BY

Syntaxe de base :

sql
SELECT columns FROM table_name
ORDER BY column1 [ASC|DESC];

Directions de tri :

  • ASC - Ascendant (A-Z, 0-9) - Par défaut
  • DESC - Descendant (Z-A, 9-0)

Exemples :

sql
-- Tri sur une colonne
SELECT * FROM sales
ORDER BY Amount DESC;

-- Tri multi-colonnes
SELECT * FROM sales
ORDER BY Product ASC, Amount DESC;

Points clés :

  • ORDER BY trie le jeu de résultats final
  • Peut trier par plusieurs colonnes en séquence
  • Similaire à la fonctionnalité de tri d'Excel

3.2 Pagination des Résultats avec LIMIT

Syntaxe de base :

sql
SELECT columns FROM table_name
LIMIT number_of_rows;

Utilisations courantes :

  • Prévisualiser des données sans charger tous les résultats
  • Améliorer les performances des requêtes
  • Exporter des échantillons de données
  • Éviter la surcharge des grands jeux de résultats

Exemples :

sql
-- Obtenir les 100 premières lignes
SELECT * FROM sales LIMIT 100;

-- Obtenir les 10 montants les plus élevés
SELECT * FROM sales
ORDER BY Amount DESC
LIMIT 10;

Points clés :

  • LIMIT contrôle le nombre de lignes retournées
  • Souvent utilisé avec ORDER BY pour des résultats significatifs
  • De nombreux outils appliquent des LIMIT par défaut pour la sécurité

3.3 Calculs sur Colonnes

Syntaxe de base :

sql
SELECT column1, column2, expression AS alias FROM table_name;

Opérations courantes :

  • Arithmétique : +, -, *, /
  • Fonctions : ROUND(), UPPER(), LOWER()
  • Concaténation : || ou CONCAT()

Exemples :

sql
-- Calcul simple
SELECT Product, Amount, Amount * 1.2 AS Amount_With_Tax FROM sales;

-- Utilisation de fonctions
SELECT Product, UPPER(Product) AS Product_Upper FROM sales;

-- Arrondi de nombres
SELECT Product, ROUND(Amount, 0) AS Rounded_Amount FROM sales;

Points clés :

  • Les calculs sont effectués dans la clause SELECT
  • Utiliser AS pour nommer les colonnes calculées
  • Prend en charge la plupart des opérations et fonctions similaires à Excel

3.4 Manipulation de Texte

Syntaxe de base :

sql
SELECT text_function(column) FROM table_name;

Fonctions texte courantes :

  • Concaténation : || ou CONCAT()
  • Sous-chaînes : LEFT(), RIGHT(), SUBSTRING()
  • Conversion de casse : UPPER(), LOWER()
  • Longueur : LENGTH() ou LEN()

Exemples :

sql
-- Concaténation
SELECT Product || ' - $' || Amount AS Product_Price FROM sales;

-- Sous-chaînes
SELECT LEFT(Product, 3) AS First3, SUBSTRING(Product, 2, 3) AS Mid3 FROM sales;

-- Conversion de casse
SELECT UPPER(Product) AS UpperCase, LOWER(Product) AS LowerCase FROM sales;

-- Longueur de texte
SELECT Product, LENGTH(Product) AS Name_Length FROM sales;

Points clés :

  • Fonctionnalité similaire aux fonctions texte d'Excel
  • La syntaxe peut varier légèrement selon les systèmes de base de données
  • Utile pour formater et nettoyer les données textuelles

3.5 Catégorisation Intelligente avec CASE

Syntaxe de base :

sql
SELECT column,
  CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ELSE default_result
  END AS new_column
FROM table_name;

Utilisations courantes :

  • Créer des catégories à partir de plages numériques
  • Associer des valeurs à des libellés
  • Gérer les valeurs NULL avec des valeurs par défaut
  • Implémenter une logique conditionnelle

Exemples :

sql
-- Catégorisation simple
SELECT Product, Amount,
  CASE
    WHEN Amount >= 100 THEN 'Élevé'
    WHEN Amount >= 50 THEN 'Moyen'
    ELSE 'Faible'
  END AS Amount_Category
FROM sales;

-- Association de valeurs
SELECT Product,
  CASE
    WHEN Product = 'Apples' THEN 'Fruit'
    WHEN Product = 'Carrots' THEN 'Légume'
    ELSE 'Autre'
  END AS Product_Type
FROM sales;

-- Gestion des NULL
SELECT Product,
  CASE
    WHEN Amount IS NULL THEN 0
    ELSE Amount
  END AS Amount_Filled
FROM sales;

Points clés :

  • Similaire aux fonctions IF/IFS d'Excel
  • Évalue les conditions dans l'ordre
  • Nécessite END pour fermer l'instruction CASE
  • Utiliser AS pour nommer la colonne résultante

4. 📊 Agrégation des Données

4.1 Fonctions d'Agrégation de Base

Syntaxe de base :

sql
SELECT aggregate_function(column) FROM table_name;

Fonctions courantes :

FonctionActionExemple
SUM()Additionne les valeursSUM(Amount)
AVG()Calcule la moyenneAVG(Amount)
COUNT()Compte les lignesCOUNT(*)
MIN()Trouve la plus petite valeurMIN(Amount)
MAX()Trouve la plus grande valeurMAX(Amount)

Exemples :

sql
-- Montant total des ventes
SELECT SUM(Amount) AS Total_Sales FROM sales;

-- Agrégats multiples
SELECT
  COUNT(*) AS Row_Count,
  SUM(Amount) AS Total_Sales,
  AVG(Amount) AS Avg_Sale,
  MIN(Amount) AS Min_Sale,
  MAX(Amount) AS Max_Sale
FROM sales;

Points clés :

  • Similaire aux fonctions de synthèse d'Excel et aux valeurs des tableaux croisés dynamiques
  • Peut utiliser plusieurs fonctions dans la même requête
  • Les valeurs NULL sont ignorées dans les calculs

4.2 GROUP BY : Le Changement de Jeu

Syntaxe de base :

sql
SELECT column, aggregate_function(column)
FROM table_name
GROUP BY column;

Exemples :

sql
-- Ventes totales par produit
SELECT Product, SUM(Amount) AS Total_Sales
FROM sales
GROUP BY Product;

-- Ventes totales par jour
SELECT SaleDate, SUM(Amount) AS Total_Sales
FROM sales
GROUP BY SaleDate
ORDER BY SaleDate;

Règles clés :

  • Toute colonne non agrégée dans SELECT doit être dans GROUP BY
  • Similaire aux étiquettes de ligne des tableaux croisés dynamiques Excel
  • Peut grouper par plusieurs colonnes (séparées par des virgules)

Points clés :

  • GROUP BY permet de synthétiser les données par catégories
  • Essentiel pour créer des rapports significatifs
  • Souvent utilisé avec ORDER BY pour des résultats triés

4.3 Groupement Multi-Niveaux

Syntaxe de base :

sql
SELECT column1, column2, aggregate_function(column)
FROM table_name
GROUP BY column1, column2;

Exemples :

sql
-- Ventes totales par produit et date
SELECT Product, SaleDate, SUM(Amount) AS Total_Sales
FROM sales
GROUP BY Product, SaleDate
ORDER BY Product, SaleDate;

Points clés :

  • Similaire aux étiquettes de ligne imbriquées dans les tableaux croisés dynamiques Excel
  • L'ordre des colonnes dans GROUP BY affecte le groupement
  • Chaque combinaison de colonnes groupées obtient sa propre ligne

4.4 Filtrage des Groupes avec HAVING

Syntaxe de base :

sql
SELECT column, aggregate_function(column)
FROM table_name
GROUP BY column
HAVING condition;

Exemples :

sql
-- Produits avec ventes totales supérieures à 200
SELECT Product, SUM(Amount) AS Total_Sales
FROM sales
GROUP BY Product
HAVING SUM(Amount) > 200;

-- Combinaison de WHERE et HAVING
SELECT Product, SUM(Amount) AS Total_Sales
FROM sales
WHERE SaleDate BETWEEN '2024-05-01' AND '2024-05-31'
GROUP BY Product
HAVING Total_Sales > 200;

Points clés :

  • HAVING filtre les groupes après agrégation (WHERE filtre les lignes avant)
  • Peut référencer des fonctions d'agrégation ou des alias de colonnes
  • Similaire au filtrage des résultats des tableaux croisés dynamiques dans Excel

5. 📅 Techniques Avancées

5.1 Gestion des Dates

Filtrage de base des dates :

sql
SELECT * FROM sales
WHERE SaleDate BETWEEN '2024-05-01' AND '2024-05-31';

Fonctions d'extraction de dates :

sql
SELECT
  SaleDate,
  YEAR(SaleDate) AS Sale_Year,
  MONTH(SaleDate) AS Sale_Month,
  DAY(SaleDate) AS Sale_Day
FROM sales;

Groupement par parties de date :

sql
SELECT
  YEAR(SaleDate) AS Year,
  MONTH(SaleDate) AS Month,
  SUM(Amount) AS Total_Sales
FROM sales
GROUP BY YEAR(SaleDate), MONTH(SaleDate)
ORDER BY Year, Month;

Arithmétique des dates :

sql
-- Ajout de jours
SELECT SaleDate, SaleDate + 7 AS Week_Later FROM sales;

-- Différence de dates en jours
SELECT EndDate - StartDate AS Days_Diff FROM sales;

Variations courantes selon les bases de données :

FonctionPostgreSQL/OracleSQL ServerMySQLSnowflake
Extraire l'annéeYEAR(date)YEAR(date)YEAR(date)YEAR(date)
Formater une dateTO_CHAR(date, 'YYYY-MM')FORMAT(date, 'yyyy-MM')DATE_FORMAT(date, '%Y-%m')TO_VARCHAR(date, 'YYYY-MM')
Ajouter des joursdate + nDATEADD(day, n, date)DATE_ADD(date, INTERVAL n DAY)DATEADD(day, n, date)

Points clés :

  • Les fonctions de date varient selon la base de données - consultez la documentation
  • Capacités similaires aux fonctions de date d'Excel
  • Essentiel pour l'analyse et les rapports basés sur le temps

5.2 Solutions pour les Valeurs NULL

Comprendre NULL :

  • Représente des données manquantes/inconnues (comme les cellules vides d'Excel)
  • N'est pas égal à zéro ou à une chaîne vide

Filtrer les NULL :

sql
-- Trouver les valeurs NULL
SELECT * FROM sales WHERE Amount IS NULL;

-- Exclure les valeurs NULL
SELECT * FROM sales WHERE Amount IS NOT NULL;

Remplacer les NULL :

sql
-- COALESCE fournit des valeurs par défaut
SELECT Product, COALESCE(Amount, 0) AS Amount_Filled FROM sales;

-- Alternative avec CASE
SELECT Product,
  CASE
    WHEN Amount IS NULL THEN 'Manquant'
    ELSE CAST(Amount AS VARCHAR)
  END AS Amount_Status
FROM sales;

Points clés :

  • Toujours utiliser IS NULL/IS NOT NULL pour vérifier les NULL
  • COALESCE est la méthode standard pour gérer les NULL
  • CASE offre une gestion plus flexible des NULL

5.3 Fondamentaux des Sous-requêtes

Que sont les sous-requêtes ?

  • Requêtes imbriquées dans d'autres requêtes
  • Similaires aux tableaux/formules auxiliaires dans Excel
  • Peuvent être utilisées dans WHERE, IN, EXISTS, SELECT

Syntaxe de base des sous-requêtes :

sql
-- Filtrer avec le résultat d'une sous-requête
SELECT * FROM sales
WHERE Amount > (SELECT AVG(Amount) FROM sales);

-- IN avec sous-requête
SELECT * FROM sales
WHERE Product IN (SELECT Product FROM featured_products);

-- NOT IN avec sous-requête
SELECT * FROM sales
WHERE Product NOT IN (SELECT Product FROM discontinued_products);

Gestion des NULL avec NOT IN :

sql
-- NOT IN sécurisé (filtre les NULL)
SELECT * FROM sales
WHERE Product NOT IN (
  SELECT Product FROM discontinued_products
  WHERE Product IS NOT NULL
);

-- Alternative avec COALESCE
SELECT * FROM sales
WHERE Product NOT IN (
  SELECT COALESCE(Product, '???') FROM discontinued_products
);

Points clés :

  • Les sous-requêtes permettent un filtrage dynamique
  • NOT IN avec NULL peut causer des résultats inattendus
  • Toujours gérer les NULL dans les sous-requêtes utilisées avec NOT IN

5.4 Migration d'Excel vers SQL

Équivalents courants Excel vers SQL :

Tâche ExcelÉquivalent SQL
Filtrer des lignesClause WHERE
Trier des donnéesClause ORDER BY
Tableau croisé dynamiqueGROUP BY avec agrégats
VLOOKUPJOIN
FormulesExpressions dans SELECT
Supprimer les doublonsSELECT DISTINCT

Exemple de migration :

sql
-- Excel : Filtrer les Pommes en mai, somme de Amount
-- Équivalent SQL :
SELECT SUM(Amount) AS Total_Apples_May
FROM sales
WHERE Product = 'Apples'
  AND Date BETWEEN '2024-05-01' AND '2024-05-31';

Avantages de la migration :

  • Gère des jeux de données plus grands sans problèmes de performance
  • Automatise les analyses répétitives
  • Fournit une source unique de vérité pour les équipes

Points clés :

  • La plupart des workflows Excel ont des équivalents SQL directs
  • SQL est plus efficace pour les analyses volumineuses/récurrentes
  • Commencez par reproduire les rapports courants en SQL

6. 🤝 Jointures de Tables

6.1 Bases des INNER JOIN

Analogies Excel : Similaire à VLOOKUP entre feuilles

Syntaxe de base :

sql
SELECT t1.column1, t2.column2
FROM table1 t1
INNER JOIN table2 t2
  ON t1.common_column = t2.common_column;

Exemple :

sql
-- Combiner les ventes avec les détails des produits
SELECT s.ProductID, p.ProductName, s.Amount
FROM sales s
INNER JOIN products p
  ON s.ProductID = p.ProductID;

Bonnes pratiques d'alias de table :

  • Utiliser des alias courts et significatifs (ex : s pour sales, p pour products)
  • Être cohérent avec les alias dans toute la requête
  • Aide à désambiguïser les colonnes du même nom

Points clés :

  • INNER JOIN ne retourne que les lignes correspondantes des deux tables
  • La condition de jointure (clause ON) est obligatoire
  • Peut joindre sur n'importe quelles colonnes correspondantes, pas seulement les ID

6.2 LEFT JOIN en Pratique

Analogies Excel : Comme VLOOKUP qui conserve les lignes avec erreurs #N/A

Syntaxe de base :

sql
SELECT t1.column1, t2.column2
FROM table1 t1
LEFT JOIN table2 t2
  ON t1.common_column = t2.common_column;

Exemple : Inclure toutes les ventes, même sans info produit

sql
SELECT s.ProductID, p.ProductName, s.Amount
FROM sales s
LEFT JOIN products p
  ON s.ProductID = p.ProductID;

Trouver les correspondances manquantes :

sql
-- Produits sans vente
SELECT p.ProductID, p.ProductName
FROM products p
LEFT JOIN sales s ON p.ProductID = s.ProductID
WHERE s.ProductID IS NULL;

-- Ventes sans info produit
SELECT s.ProductID, s.Amount
FROM sales s
LEFT JOIN products p ON s.ProductID = p.ProductID
WHERE p.ProductID IS NULL;

Points clés :

  • LEFT JOIN conserve toutes les lignes de la table de gauche
  • Les correspondances manquantes apparaissent comme valeurs NULL
  • Utiliser WHERE IS NULL pour trouver les lignes non correspondantes

6.3 Jointures Multi-Tables

Analogies Excel : Comme chaîner plusieurs VLOOKUPs entre feuilles

Syntaxe de base :

sql
SELECT t1.col, t2.col, t3.col
FROM table1 t1
JOIN table2 t2 ON t1.key = t2.key
JOIN table3 t3 ON t1.key = t3.key;

Exemple : Joindre ventes, produits et clients

sql
SELECT s.SaleID, s.Amount, p.ProductName, c.CustomerName
FROM sales s
INNER JOIN products p ON s.ProductID = p.ProductID
INNER JOIN customers c ON s.CustomerID = c.CustomerID;

Bonnes pratiques :

  • Utiliser des alias de table clairs et cohérents (s, p, c)
  • Joindre les tables dans un ordre logique (commencer par la table principale)
  • Tester les jointures progressivement (ajouter une jointure à la fois)

Points clés :

  • Peut joindre autant de tables que nécessaire
  • Chaque jointure nécessite une condition ON
  • Les alias sont essentiels pour la lisibilité

6.4 Gestion des Doublons de Jointure

Causes courantes :

  • Valeurs en double dans les colonnes de jointure
  • Relations plusieurs-à-plusieurs
  • Problèmes de qualité des données

Diagnostiquer les doublons :

sql
-- Vérifier les clés en double
SELECT join_column, COUNT(*)
FROM table
GROUP BY join_column
HAVING COUNT(*) > 1;

Exemple de problème :

sql
-- Peut produire des lignes en double si products a des doublons
SELECT s.SaleID, p.ProductName, s.Amount
FROM sales s
JOIN products p ON s.ProductID = p.ProductID;

Solutions :

  1. Corriger la qualité des données à la source (supprimer les doublons)
  2. Utiliser DISTINCT (solution temporaire) :
sql
SELECT DISTINCT s.SaleID, p.ProductName, s.Amount
FROM sales s
JOIN products p ON s.ProductID = p.ProductID;
  1. S'assurer que les colonnes de jointure sont des clés uniques

Points clés :

  • Les jointures multiplient les lignes quand des doublons existent
  • Toujours vérifier les doublons avant de joindre
  • Préférer corriger les données plutôt qu'utiliser DISTINCT

6.5 Migration Multi-Tables d'Excel vers SQL

Équivalents Excel vers SQL :

Tâche ExcelÉquivalent SQL
VLOOKUP entre feuillesJOIN
Combiner plusieurs tablesPlusieurs JOINs
Supprimer les doublonsSELECT DISTINCT
Filtrer après jointureWHERE après JOIN

Exemple de migration :

sql
-- Excel : Combiner ventes, produits, clients avec VLOOKUPs
-- Équivalent SQL :
SELECT s.SaleID, s.Amount, p.ProductName, c.CustomerName
FROM sales s
JOIN products p ON s.ProductID = p.ProductID
JOIN customers c ON s.CustomerID = c.CustomerID;

Avantages de la migration :

  • Gère les relations complexes plus fiablement
  • Automatise les analyses multi-tables répétitives
  • Fournit une source unique de vérité pour les équipes

Points clés :

  • Les jointures SQL remplacent les VLOOKUPs sujets aux erreurs
  • Commencez par reproduire les rapports multi-feuilles courants
  • Documentez vos requêtes pour la collaboration d'équipe