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 Excel | Terme SQL/Base de données |
---|---|
Feuille/Tableau | Table |
Colonne | Colonne/Champ |
Ligne | Enregistrement |
Classeur | Base 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 lignes | Clause WHERE |
Sélectionner des colonnes | Instruction SELECT |
Trier des données | Clause ORDER BY |
Colonnes calculées | Expressions dans SELECT |
Tableau croisé dynamique | Agrégations avec GROUP BY |
1.2 Votre Première Instruction SELECT
Syntaxe de base :
SELECT * FROM table_name;
Points clés :
SELECT *
récupère toutes les colonnesFROM
spécifie la table à interroger- Équivalent à ouvrir une feuille dans Excel
Exemple :
SELECT * FROM sales;
Retourne :
SaleDate | Product | Amount |
---|---|---|
2024-05-01 | Apples | 120 |
2024-05-01 | Oranges | 80 |
1.3 Sélection de Colonnes Spécifiques
Syntaxe de base :
SELECT column1, column2 FROM table_name;
Alias de colonnes :
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 :
SELECT Product, Amount FROM sales;
Retourne :
Product | Amount |
---|---|
Apples | 120 |
Oranges | 80 |
SELECT Product AS Item, Amount AS Total FROM sales;
Retourne :
Item | Total |
---|---|
Apples | 120 |
Oranges | 80 |
2. ⚙️ Filtrage des Données
2.1 WHERE : Le Filtre SQL
Syntaxe de base :
SELECT columns FROM table_name
WHERE condition;
Opérateurs de comparaison :
Opérateur | Signification | Exemple |
---|---|---|
= | Égal | Product = 'Apples' |
<> | Différent | Product <> 'Oranges' |
> | Supérieur à | Amount > 100 |
< | Inférieur à | Amount < 100 |
>= | Supérieur ou égal | Amount >= 100 |
<= | Inférieur ou égal | Amount <= 100 |
Gestion des NULL :
WHERE column IS NULL
WHERE column IS NOT NULL
Exemple COALESCE :
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 :
WHERE column BETWEEN value1 AND value2
Valeurs multiples :
WHERE column IN (value1, value2, ...)
Combinaison de conditions :
WHERE condition1 AND condition2
WHERE condition1 OR condition2
Exemples :
SELECT * FROM sales
WHERE Amount BETWEEN 80 AND 120;
SELECT * FROM sales
WHERE Product IN ('Apples', 'Oranges');
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 :
WHERE column LIKE '%pattern%'
Caractères génériques :
%
correspond à n'importe quel nombre de caractères_
correspond à un seul caractère
Exemples :
-- 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 :
WHERE condition1 AND condition2
WHERE condition1 OR condition2
Regroupement avec parenthèses :
WHERE (condition1 AND condition2) OR condition3
Exemples :
-- 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 :
SELECT columns FROM table_name
ORDER BY column1 [ASC|DESC];
Directions de tri :
ASC
- Ascendant (A-Z, 0-9) - Par défautDESC
- Descendant (Z-A, 9-0)
Exemples :
-- 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 :
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 :
-- 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 :
SELECT column1, column2, expression AS alias FROM table_name;
Opérations courantes :
- Arithmétique :
+
,-
,*
,/
- Fonctions :
ROUND()
,UPPER()
,LOWER()
- Concaténation :
||
ouCONCAT()
Exemples :
-- 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 :
SELECT text_function(column) FROM table_name;
Fonctions texte courantes :
- Concaténation :
||
ouCONCAT()
- Sous-chaînes :
LEFT()
,RIGHT()
,SUBSTRING()
- Conversion de casse :
UPPER()
,LOWER()
- Longueur :
LENGTH()
ouLEN()
Exemples :
-- 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 :
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 :
-- 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 :
SELECT aggregate_function(column) FROM table_name;
Fonctions courantes :
Fonction | Action | Exemple |
---|---|---|
SUM() | Additionne les valeurs | SUM(Amount) |
AVG() | Calcule la moyenne | AVG(Amount) |
COUNT() | Compte les lignes | COUNT(*) |
MIN() | Trouve la plus petite valeur | MIN(Amount) |
MAX() | Trouve la plus grande valeur | MAX(Amount) |
Exemples :
-- 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 :
SELECT column, aggregate_function(column)
FROM table_name
GROUP BY column;
Exemples :
-- 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 :
SELECT column1, column2, aggregate_function(column)
FROM table_name
GROUP BY column1, column2;
Exemples :
-- 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 :
SELECT column, aggregate_function(column)
FROM table_name
GROUP BY column
HAVING condition;
Exemples :
-- 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 :
SELECT * FROM sales
WHERE SaleDate BETWEEN '2024-05-01' AND '2024-05-31';
Fonctions d'extraction de dates :
SELECT
SaleDate,
YEAR(SaleDate) AS Sale_Year,
MONTH(SaleDate) AS Sale_Month,
DAY(SaleDate) AS Sale_Day
FROM sales;
Groupement par parties de date :
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 :
-- 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 :
Fonction | PostgreSQL/Oracle | SQL Server | MySQL | Snowflake |
---|---|---|---|---|
Extraire l'année | YEAR(date) | YEAR(date) | YEAR(date) | YEAR(date) |
Formater une date | TO_CHAR(date, 'YYYY-MM') | FORMAT(date, 'yyyy-MM') | DATE_FORMAT(date, '%Y-%m') | TO_VARCHAR(date, 'YYYY-MM') |
Ajouter des jours | date + n | DATEADD(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 :
-- 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 :
-- 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 :
-- 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 :
-- 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 lignes | Clause WHERE |
Trier des données | Clause ORDER BY |
Tableau croisé dynamique | GROUP BY avec agrégats |
VLOOKUP | JOIN |
Formules | Expressions dans SELECT |
Supprimer les doublons | SELECT DISTINCT |
Exemple de migration :
-- 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 :
SELECT t1.column1, t2.column2
FROM table1 t1
INNER JOIN table2 t2
ON t1.common_column = t2.common_column;
Exemple :
-- 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 :
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
SELECT s.ProductID, p.ProductName, s.Amount
FROM sales s
LEFT JOIN products p
ON s.ProductID = p.ProductID;
Trouver les correspondances manquantes :
-- 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 :
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
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 :
-- Vérifier les clés en double
SELECT join_column, COUNT(*)
FROM table
GROUP BY join_column
HAVING COUNT(*) > 1;
Exemple de problème :
-- 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 :
- Corriger la qualité des données à la source (supprimer les doublons)
- Utiliser DISTINCT (solution temporaire) :
SELECT DISTINCT s.SaleID, p.ProductName, s.Amount
FROM sales s
JOIN products p ON s.ProductID = p.ProductID;
- 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 feuilles | JOIN |
Combiner plusieurs tables | Plusieurs JOIN s |
Supprimer les doublons | SELECT DISTINCT |
Filtrer après jointure | WHERE après JOIN |
Exemple de migration :
-- 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