🎯 Il reste quelques jours ce mois-ci Soutenez SQLTest.online et aidez-nous à garder la pratique SQL gratuite pour tous. Faites un don aujourd'hui →
Code SQL copié dans le presse-papiers

Leçons SQL : un cours gratuit des bases à l'analyse de données

12 chapitres et 74 leçons vous mènent du premier SELECT aux jointures, aux fonctions de fenêtrage, à la modification des données et aux performances des requêtes. Chaque leçon explique un sujet avec des exemples SQL et renvoie à des exercices pratiques sur de vraies bases de données.

Trouvez une leçon par thème ou mot-clé ci-dessous, ou commencez par le chapitre 1.

1 Premiers pas avec SQL

  1. 1.1 Introduction aux bases de données 8 min

    Une base de données est un ensemble organisé de données géré par un SGBD. Types de BDD, rôle du SGBD et pourquoi SQL est le langage universel.

  2. 1.2 Types de bases de données 15 min

    Les principaux types de bases : relationnelles, clé-valeur, documentaires, graphes, séries temporelles et colonnaires, avec différences et cas d'usage.

  3. 1.3 Concepts des bases relationnelles 10 min

    Les bases des BDD relationnelles : tables, colonnes, lignes, clés primaires et étrangères et propriétés ACID des transactions, avec exemples.

  4. 1.4 Types de données de base 8 min

    Les types de données SQL définissent ce qu'une colonne peut stocker : numériques, texte, date et heure, et comment bien les choisir.

  5. 1.5 Types de données complexes 7 min

    Un tour rapide des types SQL qui stockent une structure : JSON, XML, tableaux, ENUM et SET, BLOB, UUID, types spatiaux et VECTOR pour les embeddings d'IA.

  6. 1.6 Comprendre les valeurs NULL en SQL 6 min

    Ce que signifie NULL dans une base relationnelle, en quoi il diffère de 0, d'une chaîne vide et de false, et pourquoi la logique a trois valeurs.

  7. 1.7 Aperçu du SQL 8 min

    SQL est le langage standard des bases relationnelles. Découvrez son organisation, ses sous-ensembles et la structure d'une requête SQL de base.

2 Récupération de données de base - l'instruction SELECT

  1. 2.1 Sélectionner des données d'une table 6 min

    Apprenez les bases de SELECT en SQL : toutes les colonnes ou colonnes ciblées, ordre d'affichage et DISTINCT pour supprimer les doublons.

  2. 2.2 Filtrage des données 6 min

    La clause SQL WHERE filtre les lignes par condition : opérateurs de comparaison, BETWEEN, IN, motifs LIKE et gestion correcte de NULL.

  3. 2.3 Combiner plusieurs conditions 7 min

    Apprenez les opérateurs logiques AND, OR et NOT dans SQL WHERE, la priorité d'évaluation, les parenthèses et des exemples NOT IN et NOT LIKE.

  4. 2.4 IS NULL et IS NOT NULL 6 min

    Pourquoi WHERE column = NULL ne trouve rien, comment fonctionnent IS NULL et IS NOT NULL et comment NULL cache des lignes avec NOT, <> et NOT IN.

  5. 2.5 Alias de colonnes 5 min

    Un alias de colonne SQL donne un nom temporaire à une colonne du résultat. Le mot-clé AS, les alias avec espaces, les alias de calculs et où les utiliser.

  6. 2.6 Trier les résultats 6 min

    SQL ORDER BY trie les résultats d'une requête. Ordre croissant et décroissant, tri sur plusieurs colonnes, par expressions et alias, place des NULL.

  7. 2.7 Limiter les résultats avec LIMIT et OFFSET 5 min

    SQL LIMIT limite le nombre de lignes renvoyées et OFFSET en saute. Requêtes top-N, pagination, pourquoi ORDER BY est requis, et TOP / FETCH FIRST.

  8. 2.8 Tout combiner : WHERE, ORDER BY et LIMIT 6 min

    Combinez WHERE, ORDER BY et LIMIT dans une requête SQL : ordre obligatoire des clauses, ordre logique de traitement, top-N filtré et pagination.

3 Utilisation des fonctions

  1. 3.1 Fonctions SQL intégrées 8 min

    Découvrez comment utiliser les fonctions SQL intégrées dans SELECT et WHERE, avec des exemples concrets basés sur la base Sakila.

  2. 3.2 Fonctions de chaîne courantes 8 min

    Apprenez les principales fonctions de chaîne SQL avec des exemples Sakila : nettoyer, combiner et extraire des données textuelles dans des requêtes pratiques.

  3. 3.3 Fonctions mathématiques courantes 8 min

    Apprenez les fonctions mathématiques SQL essentielles avec des exemples Sakila : arrondi, modulo, puissance, racine et cas pratiques de calcul.

  4. 3.4 Fonctions de date et d’heure 8 min

    Les fonctions de date SQL donnent la date du jour, extraient des parties, ajoutent des intervalles, calculent des écarts et formatent. Exemples NOW, DATEDIFF.

  5. 3.5 Opérateur conditionnel 7 min

    SQL CASE WHEN ajoute une logique si-alors-sinon à une requête : CASE simple et CASE de recherche, catégories dans SELECT, tri personnalisé et conditions WHERE.

  6. 3.6 Fonctions JSON 8 min

    Lisez des valeurs de colonnes JSON par chemin, filtrez les lignes, comptez les éléments d'un tableau et construisez du JSON avec JSON_VALUE, ->> et JSON_OBJECT.

4 Fonctions d'agrégation et regroupement

  1. 4.1 Fonctions d'agrégation de base 8 min

    Apprenez les fonctions d'agrégation SQL sur Sakila: COUNT, SUM, AVG, MIN, MAX, avec les différences entre COUNT(*), COUNT(column) et COUNT(DISTINCT ...).

  2. 4.2 Regrouper les données 7 min

    Apprenez GROUP BY: syntaxe, règles, regroupement sur une ou plusieurs colonnes, exemples pratiques Sakila.

  3. 4.3 Filtrer les données groupées 7 min

    Apprenez HAVING: syntaxe, différences WHERE vs HAVING, filtrage des groupes après agrégation, exemples Sakila.

  4. 4.4 Agrégation conditionnelle 8 min

    L'agrégation conditionnelle calcule plusieurs métriques en une requête SQL avec SUM, COUNT et AVG sur CASE WHEN : modèles, erreurs fréquentes et pivots.

  5. 4.5 Agrégation avancée 9 min

    ROLLUP, CUBE et GROUPING SETS ajoutent sous-totaux et total général à GROUP BY. Leurs différences, WITH ROLLUP dans MySQL et la fonction GROUPING().

5 Travailler avec plusieurs tables

  1. 5.1 Fondamentaux des JOINs en SQL 8 min

    Un SQL JOIN combine les lignes de plusieurs tables via une colonne commune : principe, clause ON et alias de tables, avec la base Sakila.

  2. 5.2 INNER JOIN - Combiner les lignes correspondantes 6 min

    SQL INNER JOIN ne renvoie que les lignes qui ont une correspondance dans les deux tables : syntaxe, alias de tables, jointure de trois tables et lignes perdues.

  3. 5.3 LEFT JOIN - Inclure toutes les lignes de la table de gauche 7 min

    SQL LEFT JOIN renvoie toutes les lignes de la table de gauche et les lignes correspondantes de droite, avec NULL sinon. Syntaxe, anti-jointures et pièges.

  4. 5.4 RIGHT JOIN - Inclure tous les enregistrements de la table de droite 4 min

    SQL RIGHT JOIN renvoie toutes les lignes de la table de droite et les lignes correspondantes de gauche. La syntaxe, le lien avec LEFT JOIN et quand l'utiliser.

  5. 5.5 FULL OUTER JOIN - Tout combiner des deux tables 6 min

    SQL FULL OUTER JOIN renvoie toutes les lignes des deux tables, avec NULL en l'absence de correspondance. La syntaxe et comment l'émuler dans MySQL et MariaDB.

  6. 5.6 CROSS JOIN - Le produit cartésien 5 min

    SQL CROSS JOIN renvoie toutes les combinaisons de lignes de deux tables. La syntaxe, la taille du résultat, et comment construire des grilles de rapport.

  7. 5.7 SELF JOIN - Joindre une table à elle-même 5 min

    Un self join SQL joint une table à elle-même pour comparer des lignes ou suivre une hiérarchie. Les alias obligatoires et comment éviter les paires en double.

  8. 5.8 Scénarios et techniques pratiques de JOIN 8 min

    Exemples pratiques de SQL JOIN : plusieurs tables, agrégation avec GROUP BY, lignes manquantes, totaux gonflés et lignes perdues des jointures externes.

  9. 5.9 Algorithmes de jointure 9 min

    Comment les bases exécutent les jointures : nested loop, hash join et merge join. Leur fonctionnement, le choix du planificateur et EXPLAIN.

  10. 5.10 Opérations sur les ensembles de données 8 min

    Les opérations ensemblistes combinent, croisent et soustraient des résultats de requêtes : UNION, INTERSECT et EXCEPT avec des exemples Sakila.

6 Sous-requêtes et expressions de table communes (CTE)

  1. 6.1 Introduction aux sous-requêtes 7 min

    Une sous-requête est un SELECT dans un autre SELECT. Découvrez les types de sous-requêtes, leur logique d'exécution et Inline View avec Sakila.

  2. 6.2 Sous-requêtes dans la clause WHERE 8 min

    Les sous-requêtes dans WHERE permettent un filtrage dynamique des données. Découvrez IN, NOT IN, EXISTS, NOT EXISTS, ANY et ALL avec Sakila.

  3. 6.3 Sous-requêtes corrélées 6 min

    Une sous-requête corrélée SQL utilise les valeurs de la requête externe pour chaque ligne : fonctionnement, comparaison avec son groupe, EXISTS et performance.

  4. 6.4 Expressions de table communes (CTE) 8 min

    Une CTE SQL est un résultat temporaire nommé, défini avec WITH. Syntaxe des CTE, CTE vs sous-requête, enchaîner plusieurs CTE et exemples d'analyse.

  5. 6.5 CTE Récursives 9 min

    Une CTE récursive SQL parcourt des hiérarchies avec WITH RECURSIVE : membre d'ancrage et récursif, chemins d'organigramme, limite de profondeur et cycles.

  6. 6.6 Application des CTE récursifs 9 min

    Exemples pratiques de CTE récursives SQL : générer une suite de dates, totaliser un sous-arbre, éclater une nomenclature et trouver des itinéraires.

7 Fonctions de fenêtre

  1. 7.1 Fonctions de fenêtre 8 min

    Les fonctions de fenêtrage SQL calculent sur des lignes liées sans les regrouper : OVER, PARTITION BY, ORDER BY, différence avec GROUP BY et part du total.

  2. 7.2 Utiliser ROW_NUMBER, RANK, DENSE_RANK et NTILE 8 min

    Différence entre ROW_NUMBER, RANK, DENSE_RANK et NTILE en SQL : traitement des ex æquo, laquelle choisir, plus PERCENT_RANK et CUME_DIST.

  3. 7.3 Fenêtres de calcul - Contrôler les limites de la fenêtre 8 min

    Le cadre de fenêtre fixe les lignes qu'utilise une fonction de fenêtrage : ROWS vs RANGE, BETWEEN, UNBOUNDED, cadre par défaut, moyenne mobile et WINDOW.

  4. 7.4 LAG, LEAD, FIRST_VALUE et LAST_VALUE 9 min

    LAG, LEAD, FIRST_VALUE et LAST_VALUE : syntaxe, cas d'usage, comparer des lignes sans self join et le piège du cadre de LAST_VALUE.

8 Langage de manipulation de données (DML)

  1. 8.1 L'instruction INSERT INTO 7 min

    SQL INSERT INTO ajoute des lignes à une table : liste de colonnes, insertions multiples, INSERT INTO ... SELECT, NULL, DEFAULT et erreurs courantes.

  2. 8.2 L'instruction UPDATE 7 min

    SQL UPDATE modifie des lignes existantes : SET et WHERE, plusieurs colonnes, calcul depuis la valeur actuelle, mise à jour depuis une autre table, sécurité.

  3. 8.3 L'instruction DELETE 6 min

    SQL DELETE supprime des lignes : DELETE ... WHERE, suppression d'après une autre table, erreurs de clés étrangères, vérification et DELETE vs TRUNCATE.

  4. 8.4 Transactions SQL 10 min

    Une transaction SQL regroupe des instructions en une seule unité : toutes réussissent ou aucune. COMMIT, ROLLBACK, SAVEPOINT, autocommit et isolation.

9 Langage de définition de données (DDL)

  1. 9.1 L’instruction CREATE TABLE 9 min

    SQL CREATE TABLE crée une table : types de données, PRIMARY KEY, AUTO_INCREMENT, contraintes NOT NULL, UNIQUE, DEFAULT, CHECK et FOREIGN KEY.

  2. 9.2 L’instruction ALTER TABLE 9 min

    ALTER TABLE modifie une table existante. Ajoutez, modifiez, renommez et supprimez des colonnes, ajoutez et supprimez des contraintes dans MySQL et PostgreSQL.

  3. 9.3 Les instructions TRUNCATE et DROP TABLE 6 min

    SQL TRUNCATE vide une table et DROP TABLE la supprime. Leurs différences avec DELETE : vitesse, annulation, auto-incrément et clés étrangères.

  4. 9.4 Tables temporaires 7 min

    Les tables temporaires SQL stockent des résultats intermédiaires pour une session : CREATE TEMPORARY TABLE, AS SELECT, comparaison avec les CTE, pièges MySQL.

  5. 9.5 Vues (VIEW) 8 min

    Apprenez les vues SQL : syntaxe CREATE VIEW, differences avec les tables classiques et temporaires, mises a jour et exemples pratiques avec Sakila.

  6. 9.6 Vues matérialisées 9 min

    Une vue matérialisée stocke le résultat d'une requête sur disque et se rafraîchit à la demande. CREATE et REFRESH MATERIALIZED VIEW, et l'équivalent MySQL.

  7. 9.7 Normalisation des bases de données 10 min

    La normalisation répartit les données en tables liées pour stocker chaque fait une seule fois. Découvrez 1NF, 2NF, 3NF, BCNF, anomalies et dénormalisation.

10 Performance et qualité des requêtes

  1. 10.1 Bonnes pratiques pour un code SQL lisible et maintenable 8 min

    Bonnes pratiques SQL pour un code lisible : casse des mots-clés, retours à la ligne, noms en snake_case, alias clairs, commentaires et nettoyage d'une requête.

  2. 10.2 Écriture de requêtes SQL efficaces 10 min

    Des requêtes SQL efficaces réduisent la charge serveur et accélèrent les rapports. Apprenez le filtrage, JOIN, SARGable et LIMIT en pratique.

  3. 10.3 Introduction aux index SQL 10 min

    Découvrez ce qu'est un index SQL, son impact sur la vitesse des requêtes SELECT et les règles de base pour éviter les erreurs de performance.

  4. 10.4 Comment lire EXPLAIN 12 min

    Lisez EXPLAIN et EXPLAIN ANALYZE pas à pas : types d'accès, ordre des jointures, cost et rows, estimation et réalité, signes d'une requête SQL lente.

  5. 10.5 Comment fonctionnent les index B-tree 11 min

    Comment sont organisés les index B-tree en SQL, pourquoi ils rendent la recherche logarithmique et comment en tirer parti dans vos requêtes.

  6. 10.6 Index de texte intégral 10 min

    Un index full-text trouve les lignes par mots dans le texte, là où LIKE '%mot%' lit toute la table. MATCH AGAINST dans MySQL et recherche full-text PostgreSQL.

11 Transformation et manipulation des données pour l'analyse

  1. 11.1 Traitement pratique des chaînes en SQL 10 min

    Traitement pratique du texte en SQL : nettoyer des chaînes, extraire des domaines e-mail, créer des libellés et vérifier la qualité des données.

  2. 11.2 Utilisation pratique des fonctions de date et d'heure pour l'analyse des données 11 min

    Les fonctions de date et d'heure en SQL pour l'analyse : métriques par jour et par mois, intervalles, saisonnalité et reporting.

12 Analyse des tâches

  1. 12.1 L'option de vol la plus rapide 6 min

    Solution d'un exercice SQL : trouver le vol le plus rapide avec une correspondance grâce à une auto-jointure de la table flights et aux intervalles PostgreSQL.

  2. 12.2 Calculer le taux d'occupation moyen des vols 7 min

    Solution d'un exercice SQL : occupation moyenne des sièges par aéroport et classe avec LEFT JOIN, COUNT FILTER et deux niveaux d'agrégation dans PostgreSQL.

  3. 12.3 Carte des sièges d'avion 5 min

    Solution d'un exercice SQL : plan des sièges d'un avion en découpant les numéros de siège avec rtrim et right et en regroupant les lettres avec json_agg.

  4. 12.4 N-ième salaire le plus élevé 7 min

    Trouver le deuxième ou le N-ième salaire le plus élevé en SQL : MAX et sous-requête, LIMIT OFFSET, DENSE_RANK, sous-requête corrélée, ex æquo, NULL et groupes.

  5. 12.5 Trouver et supprimer les doublons 7 min

    Trouver les doublons en SQL avec GROUP BY et HAVING, lister chaque copie avec une fonction de fenêtrage, supprimer les doublons en gardant une ligne.

  6. 12.6 Top N lignes par groupe 7 min

    Les N premières lignes de chaque groupe en SQL : ROW_NUMBER avec PARTITION BY, ex æquo avec RANK et DENSE_RANK, sous-requête corrélée et LATERAL.

  7. 12.7 Total cumulé 6 min

    Total cumulé en SQL avec SUM() OVER (ORDER BY) : revenu cumulé par jour, totaux remis à zéro chaque année, piège ROWS vs RANGE et solution sans fenêtrage.

  8. 12.8 Trous et îlots 7 min

    Gaps and islands en SQL : regrouper les dates consécutives avec ROW_NUMBER, trouver les plages manquantes avec LEAD et la plus longue série par client.

  9. 12.9 Pivot : lignes en colonnes 7 min

    Pivot en SQL, des lignes aux colonnes : agrégation conditionnelle avec SUM(CASE ...), pivot par mois, pivot dynamique dans MySQL, opérateur PIVOT et unpivot.