ToolActToolAct

Outil de Formatage SQL

SQL en entrée
Résultat formaté
Lignes: 1Caractères: 0Octets: 0
Lignes: 1Caractères: 0

Qu'est-ce que le formatage SQL ?

Le formateur SQL structure les requêtes avec indentation, retours à la ligne et clauses clairement visibles. SELECT, JOIN, WHERE, GROUP BY, HAVING, ORDER BY, CTEs et sous-requêtes deviennent plus faciles à lire, ce qui aide revues, débogage, formation et analyse de longs rapports. Le formatage peut aussi révéler jointures croisées accidentelles, conditions trop denses ou parenthèses mal placées. Il ne change pas la logique de base, n’optimise pas les plans d’exécution, ne garantit pas la portabilité entre dialectes et ne sécurise pas du SQL dynamique dangereux. En production, paramètres, permissions, index, transactions, verrouillage et plan réel doivent être examinés.

Mode d'emploi

Mode d'emploi

  1. Collez ou saisissez les instructions SQL dans la zone de saisie de gauche.
  2. Choisissez la taille d'indentation (2 espaces, 4 espaces ou Tab) et la casse des mots-clés.
  3. Cliquez sur « Formater » pour embellir le SQL ou sur « Minifier » pour supprimer les espaces.
  4. Le résultat s'affiche à droite avec coloration syntaxique.
  5. Cliquez sur « Copier » ou « Télécharger » pour enregistrer le résultat.

Conseils pour la revue SQL

  • Le formatage améliore la lisibilité mais ne vérifie ni les permissions, ni les index, ni les plans d'exécution, ni la logique métier.
  • Avant d'exécuter un SQL modifié, relisez manuellement les clauses générées, les littéraux de chaîne, les commentaires et la syntaxe propre à votre base.

Cas d’utilisation

Transformer une requête SQL dense en clauses vérifiablesCollez un long SELECT, JOIN, WHERE, GROUP BY, HAVING, ORDER BY, LIMIT ou INSERT et le formateur répartit les clauses principales sur des lignes séparées avec indentation. Le résultat est plus facile à relire, déboguer et expliquer lorsqu’un ORM ou un outil de reporting a généré une seule ligne compacte.
Harmoniser la casse des mots-clés selon le style de l’équipe ou de la baseChoisissez des mots-clés en majuscules ou en minuscules tout en préservant les littéraux de chaîne, les commentaires et les blocs délimités par des dollars. Cela standardise les extraits pour les fichiers de migration, les tableaux de bord, les runbooks et la documentation interne sans rechercher manuellement chaque SELECT, JOIN, CASE ou fonction d’agrégation. Comme l’analyse se fait localement dans le navigateur, les requêtes faisant référence à des noms de tables internes, des feature flags non publiés ou des schémas de staging peuvent être reformattées sans que le SQL ne transite par un beautifieur tiers.
Compresser le SQL pour le transport après l’avoir reluUtilisez le mode minification pour supprimer les commentaires de bloc, les commentaires de ligne, les espaces répétés et les espaces autour des virgules ou des parenthèses. C’est pratique pour les paramètres d’URL, les fixtures ou les valeurs de configuration compactes, mais cette opération doit être appliquée après avoir vérifié que la version lisible correspond bien à votre intention.
Formater les CTE et sous-requêtes avec indentation imbriquéeLes expressions de table communes avec les clauses WITH et les sous-requêtes corrélées gagnent un niveau d’indentation supplémentaire afin que le SELECT externe, le SELECT interne et les blocs UNION restent visuellement séparés. Cela facilite le suivi des chaînes de CTE récursives et des sous-requêtes EXISTS lors de la revue de code. La détection du dialecte est importante ici : PostgreSQL supporte `DISTINCT ON (col)`, MySQL utilise les identifiants entre backticks et `IFNULL`, SQL Server utilise les crochets `[table]` et `TOP n` au lieu de `LIMIT`, et Oracle conserve `DUAL` et `ROWNUM` ; le formateur aligne les mots-clés principaux (SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY) de manière cohérente, mais la liste de tokens spécifique au dialecte reste à vérifier par l’utilisateur.
Repérer les jointures cartésiennes accidentelles avant mise en productionLe formatage d’un SELECT multi-tables avec des clauses FROM séparées par des virgules rend évident l’absence de conditions JOIN ... ON. La mise en page étalée expose la liste de tables nues où une multiplication de lignes apparaît soudainement en production. Attention aux paramètres écrits comme espaces réservés point d’interrogation (utilisés par les requêtes préparées MySQL et de nombreux ORM) par opposition à la numérotation dollar-un, dollar-deux (paramètres liés PostgreSQL) et aux liens nommés deux-points (Oracle et SQL*Plus) ; le formateur protège ces tokens contre un traitement en tant qu’identifiants, mais la casse des mots-clés doit toujours correspondre au style choisi par l’équipe (majuscules pour les migrations, minuscules pour la lisibilité en revue de code).

Principe technique

Le formatage SQL est un pipeline en trois étapes : un analyseur lexical (tokenizer) découpe le texte brut en un flux de jetons (mots-clés, identifiants, littéraux, opérateurs, commentaires, espaces), un analyseur syntaxique regroupe ces jetons par structure de clause, et un imprimeur parcourt le résultat en émettant des retours à la ligne, de l'indentation et une conversion de casse selon une politique de style. L'analyseur lexical doit être conscient du dialecte car les délimiteurs de chaînes et d'identifiants diffèrent : SQL standard utilise les guillemets doubles pour les identifiants et les guillemets simples pour les chaînes, MySQL utilise les backticks pour les identifiants, SQL Server utilise les crochets, et PostgreSQL ajoute les blocs délimités par des dollars ($$...$$ ou $tag$...$tag$) qui échappent tous les caractères intérieurs y compris les guillemets.

La passe d'impression applique une règle par clause : SELECT / FROM / WHERE / GROUP BY / HAVING / ORDER BY / LIMIT commencent chacun une nouvelle ligne à la colonne zéro, les colonnes projetées et les conditions ON s'indentent d'un niveau (2 espaces, 4 espaces ou une tabulation), les mots-clés JOIN (INNER / LEFT / RIGHT / FULL / CROSS) s'alignent sous FROM, CASE / WHEN / THEN / ELSE / END sont empilés verticalement, et les sous-requêtes entre parenthèses et les CTE imbriquées dans WITH reçoivent un niveau d'indentation supplémentaire afin que le SELECT externe reste visuellement ancré. Les littéraux de chaîne, les commentaires de ligne (-- ...), les commentaires de bloc (/* ... */) et les blocs délimités par des dollars sont analysés une seule fois et copiés tels quels, de sorte que l'espacement interne n'est jamais modifié.

La conversion de casse des mots-clés est appliquée au moment de l'impression, et non par une expression régulière aveugle sur le source — seuls les jetons classés comme RESERVED_KEYWORD sont convertis en majuscules ou minuscules, de sorte qu'un identifiant appelé 'order' ou 'user' entre backticks conserve sa casse d'origine. La prise en charge du dialecte est importante car la liste des mots réservés diffère selon le moteur : PostgreSQL reconnaît DISTINCT ON, RETURNING, ILIKE ; MySQL ajoute IFNULL, LIMIT n,m, ENGINE= ; SQL Server utilise TOP n, OUTPUT, les identifiants entre crochets ; Oracle ajoute DUAL, ROWNUM, MINUS en remplacement de EXCEPT ; BigQuery et Snowflake étendent le standard avec QUALIFY, EXCEPT (colonnes) et les littéraux array/struct. La performance est linéaire par rapport à la longueur du source (O(n) jetons, O(n) octets en sortie), de sorte que même des scripts de migration de plusieurs mégaoctets sont formatés en millisecondes.
  • Analyseur lexical : découpe le source en classes RESERVED_KEYWORD, IDENTIFIER, STRING_LITERAL, NUMBER, OPERATOR, LINE_COMMENT (-- ...), BLOCK_COMMENT (/* ... */) et WHITESPACE ; les commentaires et chaînes sont préservés verbatim
  • Conscience du dialecte : chaînes entre guillemets simples (SQL standard), identifiants entre backticks (MySQL), identifiants entre crochets (SQL Server), identifiants entre guillemets doubles (PostgreSQL/standard), blocs délimités par des dollars $$...$$ (PostgreSQL)
  • Disposition des clauses : SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY, LIMIT s'ancrent chacun à la colonne 0 ; les colonnes projetées et les conditions ON s'indentent d'un niveau ; les mots-clés JOIN s'alignent sous FROM
  • Indentation des CTE et sous-requêtes : les clauses WITH indentent le SELECT interne d'un niveau supplémentaire ; les sous-requêtes corrélées dans les contextes EXISTS / IN / scalaires reçoivent leur propre indentation afin que la requête externe reste ancrée
  • Politique de casse : appliquée au moment de l'impression par classe de jeton — seuls les jetons RESERVED_KEYWORD sont mis en majuscules/minuscules, de sorte que les identifiants comme `order` ou [user] conservent leur casse d'origine
  • Paramètres liés : espaces réservés point d'interrogation (requêtes préparées MySQL), liens numérotés dollar-1/dollar-2 (PostgreSQL) et liens nommés deux-points (Oracle/SQL*Plus) sont analysés comme PARAMETER et jamais reformatés en tant qu'identifiants
  • Complexité : analyse lexicale O(n) et impression O(n) où n = longueur du source — les scripts de migration de plusieurs mégaoctets sont formatés en millisecondes ; comparable à la bibliothèque npm sql-formatter, pgFormatter et le plugin Prettier SQL

Exemples

Formater un SELECT compact avec JOIN et WHERE

Entrée :  select u.id,u.name,o.total from users u left join orders o on o.user_id=u.id where u.status='active' and o.created_at>='2026-01-01' order by o.total desc limit 10;

Sortie :
SELECT u.id, u.name, o.total
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
WHERE u.status = 'active'
  AND o.created_at >= '2026-01-01'
ORDER BY o.total DESC
LIMIT 10;

Minifier du SQL formaté pour une chaîne de configuration

Entrée (formatée, 6 lignes) :
SELECT id, name
FROM   products
WHERE  price < 100
  AND  stock > 0
ORDER  BY name;

Sortie minifiée (1 ligne, 78 caractères) :
SELECT id,name FROM products WHERE price<100 AND stock>0 ORDER BY name;

Formatage WITH (CTE) + sous-requête imbriquée

WITH recent_orders AS (
  SELECT user_id, SUM(total) AS spend
  FROM   orders
  WHERE  created_at >= NOW() - INTERVAL '30 days'
  GROUP  BY user_id
)
SELECT u.name, r.spend
FROM   users u
JOIN   recent_orders r ON r.user_id = u.id
WHERE  r.spend > (SELECT AVG(spend) FROM recent_orders);

Mots-clés en minuscules (style d'équipe)

Paramètres : Indentation = 2 espaces, Mots-clés = minuscules

Entrée :  SELECT * FROM Users WHERE Status=1;

Sortie :
select *
from users
where status = 1;

Utilisation : correspond aux fichiers de migration de style ORM Ruby on Rails / Django

FAQ

Quels dialectes SQL sont pris en charge ?

ANSI SQL standard plus les mots-clés spécifiques courants : MySQL, PostgreSQL, MSSQL/T-SQL, SQLite, Oracle, BigQuery, Snowflake. Choisissez votre dialecte cible dans le menu déroulant pour que le formateur connaisse les mots-clés spécifiques (LIMIT vs TOP, RETURNING, MERGE, etc.).

Quelles options de style sont disponibles ?

Mots-clés en majuscules ou minuscules, taille d'indentation, virgules en tête ou en fin de ligne dans les listes de colonnes, longueur de ligne max pour le retour à la ligne, et césure avant ou après les mots-clés. La page affiche généralement ces options dans un panneau latéral.

Le SQL est-il validé ?

La plupart des formateurs analysent de manière souple et laissent passer le SQL douteux tel quel. Une vraie validation nécessite une connexion à la base (ou au moins un vrai parseur SQL comme sqlparse, sqlglot). Utilisez cet outil pour la mise en forme ; utilisez votre IDE ou la base réelle pour la vérification syntaxique.

Formatera-t-il les procédures stockées et les triggers ?

La plupart des builds gèrent CREATE PROCEDURE / CREATE FUNCTION / triggers dans les limites du dialecte. Les corps très longs avec contrôle de flux (IF/ELSE/WHILE) sont formatés correctement ; les extensions propriétaires (mots-clés T-SQL spécifiques) requièrent le bon dialecte.

Ma requête est-elle envoyée ?

Non. Le formatage s'exécute dans votre navigateur avec un parseur SQL JavaScript. Le SQL collé n'est pas transmis. Cela dit, ne collez jamais de vrais identifiants de production ou des données personnelles dans un outil web.

Pourquoi mes CTE et jointures sont-ils indentés bizarrement ?

Les formateurs ne s'accordent pas sur l'alignement des CTE. Certains indentent chaque définition de CTE ; d'autres les laissent collées à gauche. Les jointures aussi ont plusieurs styles valides (« JOIN x ON » vs « JOIN x\n ON »). Choisissez l'option qui correspond au style de votre équipe et tenez-vous-y.

Peut-il minifier le SQL ?

Certaines versions proposent un mode « une seule ligne » qui supprime les retours à la ligne et les espaces superflus. Utile pour intégrer du SQL dans du code sous forme de chaîne littérale. Conservez toujours la version formatée dans le contrôle de version : le SQL sur une ligne est illisible en revue de code.