Formateur SQL

Collez une instruction SQL sur une seule ligne copiée d’un journal ou d’un ORM, et le formateur la décompose en clauses indentées avec une casse de mots-clés cohérente, des nouvelles lignes avant SELECT, FROM, WHERE, GROUP BY, et des colonnes alignées dans la projection. Prend en charge les dialectes MySQL, PostgreSQL, SQL Server, Oracle, SQLite et BigQuery, chacun ayant des mots-clés et des mots réservés légèrement différents.

Comment fonctionne le formatage

  1. 1

    Collez votre SQL

    Blob sur une seule ligne, sortie minifiée de Hibernate, peu importe. Plusieurs instructions séparées par `;` sont toutes formatées.

  2. 2

    Choisissez le dialecte et le style

    Le dialecte contrôle la liste des mots-clés ; le style contrôle le placement des virgules (en tête vs en fin), la largeur d'indentation et les mots-clés en majuscules/minuscules.

  3. 3

    Les tokens sont analysés, pas remplacés par regex

    Un analyseur gère correctement les chaînes, les commentaires, les parenthèses et les sous-requêtes. Les littéraux de chaîne sont préservés tels quels.

  4. 4

    Copiez la sortie formatée

    SQL validé, mêmes sémantiques, mise en page plus propre.

Avant et après

Avant :

SELECT u.id,u.name,COUNT(o.id) AS orders FROM users u LEFT JOIN orders o ON o.user_id=u.id WHERE u.created_at>='2024-01-01' GROUP BY u.id,u.name HAVING COUNT(o.id)>5 ORDER BY orders DESC LIMIT 50;

Après (virgule en tête, mots-clés en majuscules, indentation de 2 espaces) :

SELECT
    u.id
  , u.name
  , COUNT(o.id) AS orders
FROM users u
LEFT JOIN orders o
  ON o.user_id = u.id
WHERE u.created_at >= '2024-01-01'
GROUP BY u.id, u.name
HAVING COUNT(o.id) > 5
ORDER BY orders DESC
LIMIT 50;

Choix de style qui comptent

  • Mots-clés en majuscules vs minuscules. MAJUSCULE est traditionnel et facile à lire. Minuscule est plus propre dans les éditeurs de code modernes avec coloration syntaxique.
  • Virgules en tête vs en fin. En tête ( , col) facilite le commentaire d’une seule colonne. En fin (col,) se lit plus naturellement dans le texte.
  • Placement des virgules dans GROUP BY. Souvent une par ligne pour les longues clauses, en ligne pour les courtes.
  • Indentation des JOIN. ON sur la ligne suivante (indentation suspendue) vs sur la même ligne. Les longues conditions bénéficient de l’indentation suspendue.
  • Sous-requêtes. Indentez toute la sous-requête, pas seulement la parenthèse d’ouverture.

Pièges spécifiques au dialecte

  • Backticks MySQL vs guillemets doubles PostgreSQL pour les identifiants.
  • CTEs WITH, MS SQL a une exigence de ; avant WITH ; le formateur s’en occupe.
  • Fonctions de fenêtre, les longues clauses OVER (...) bénéficient de PARTITION BY et ORDER BY en ligne.
  • BigQuery a ARRAY_AGG, STRUCT et des suffixes de table (*_yyyymmdd) que l’analyseur ne doit pas casser.
  • Oracle a la syntaxe de jointure externe (+), le formateur la préserve mais la signale comme héritée.

Ce que le formateur ne fait pas

  • Corriger les bugs, une jointure invalide reste invalide.
  • Développer SELECT *, les listes de colonnes ne sont pas déduites du schéma.
  • Optimiser les requêtes, mise en page uniquement, pas de plans d’exécution.
  • Réécrire les sous-requêtes en CTE, une préoccupation différente.

Questions fréquentes

Non, c’est purement cosmétique. Les espaces, les nouvelles lignes et le placement des virgules changent, mais les mots-clés, les opérateurs, les littéraux et les identifiants sont préservés tels quels.

Pris en charge, CREATE TABLE, ALTER, CREATE PROCEDURE, déclencheurs. Le formateur gère les constructions de blocs (BEGIN ... END) et les continuations de ligne à l’intérieur des procédures.

Elle ne devrait pas, si c’est le cas, c’est probablement un problème de dialecte. Essayez de changer de dialecte. Veuillez signaler les échecs persistants ; nous les considérons comme des bugs.

Flink SQL et Cassandra CQL se ressemblent mais ont des mots-clés spécifiques au dialecte que les formateurs classiques déforment. Utilisez avec prudence et vérifiez que la sortie fonctionne.

Outils similaires

Outil disponible dans d’autres langues