Une bibliothèque personnelle de requêtes, de notes et de notebooks pour explorer le SQL en contexte professionnel. Le dépôt couvre aussi bien les opérations courantes que le nettoyage, l'analyse avancée et la modélisation de données.
Les exemples ciblent PostgreSQL 15+ et MySQL 8+. Les snippets communs privilégient une syntaxe portable ; les différences importantes sont isolées dans les dossiers propres à chaque moteur.
Tous les commentaires présents dans le code sont rédigés en français, avec un ton volontairement direct et pédagogique.
flowchart LR
R[SQL Playground] --> S[snippets]
R --> N[notebooks]
R --> D[notes]
R --> F[dictionnaire]
S --> C[Socle commun]
S --> P[PostgreSQL]
S --> M[MySQL]
S --> B[Cas métier]
N --> E[Notebooks exécutables]
N --> G[Guides pédagogiques]
D --> X[Explications ciblées]
F --> DF[Fonctions et constructions SQL]
snippets/: requêtes prêtes à adapter, classées du socle SQL aux cas avancés ;snippets/postgresql/: JSONB, séries,ON CONFLICT, index et plans PostgreSQL ;snippets/mysql/: JSON, CTE récursifs,ON DUPLICATE KEYet plans MySQL ;snippets/metiers/: exemples e-commerce, SaaS, finance, logistique et RH ;notebooks/: parcours thématiques, dont trois exécutables sans serveur de base ;notes/: rappels personnels sur le grain, les fenêtres, les SCD, les transactions et la portabilité.dictionnaire/: table de référence des fonctions, opérateurs et constructions avec exemples et compatibilité par moteur.
Le jeu de données commun se trouve dans snippets/00_schema_et_donnees.sql. Il sert de base aux exemples numérotés 01 à 16. Les thèmes 17 à 34 annoncent directement leurs tables supposées.
# PostgreSQL
psql -d sql_playground -f snippets/00_schema_et_donnees.sql
# MySQL
mysql sql_playground < snippets/00_schema_et_donnees.sqlLes fichiers ne sont pas tous conçus pour être exécutés intégralement : certains contiennent plusieurs variantes ou des paramètres comme :start_date. Chaque bloc indique son intention et les adaptations éventuelles.
Pour les notebooks autonomes :
python -m pip install -r notebooks/requirements.txt
jupyter lab notebooks/| Besoin | Point de départ |
|---|---|
| Retrouver une fonction ou vérifier sa compatibilité | dictionnaire/ |
Filtres, dates, NULL, agrégations |
01 à 04 |
| Fenêtres et analyses temporelles | 05 à 07 |
| Qualité, déduplication, historisation | 08 et 09 |
| Performance et diagnostic | 10, puis dossiers moteur |
| JSON, récursivité, transactions | 12 à 14 |
| Modélisation analytique et sécurité | 15 et 16 |
| Indexation, recherche et résultats matérialisés | 17 à 19 |
| Incrémental, retards et calendriers | 20 à 22 |
| Cohortes, fraude et réapprovisionnement | 23 à 25 |
| Routines, géospatial et nettoyage avancé | 26 à 28 |
| Bitemporel, fuseaux horaires et intervalles | 29 à 31 |
| Distributions, pagination et expérimentations | 32 à 34 |
| Exemples orientés activité | snippets/metiers/ |
- Un commentaire court explique surtout le pourquoi ou le piège métier.
- Le grain attendu est annoncé avant les requêtes complexes.
- Les périodes utilisent de préférence une borne de début incluse et une borne de fin exclue.
- Les divisions protègent le dénominateur avec
NULLIF. - Les classements ajoutent une clé de départage pour rester déterministes.
- Les variantes non portables portent explicitement la mention
PostgreSQLouMySQL.
La majorité des exemples communs utilise les CTE, fonctions fenêtre et expressions standard disponibles sur PostgreSQL 15+ et MySQL 8+. Les principales différences concernent les intervalles, la génération de séries, le JSON, les upserts, les index partiels et les outils d'analyse de plans. La note portabilite-postgresql-mysql.md résume ces écarts.
Ce dépôt est un terrain de jeu : avant de reprendre une requête en production, il faut vérifier le schéma réel, les volumes, les fuseaux horaires, les règles métier et le plan d'exécution.
Après installation des dépendances des notebooks, un contrôle unique vérifie la structure, les liens et l’état d’exécution des notebooks :
python tools/validate_repository.py