Passer au contenu

Formateur et Validateur SQL - Formatez des Requêtes SQL en Ligne Gratuitement

Formateur et validateur SQL gratuit. Formatez automatiquement SQL avec une indentation et une capitalisation appropriées. Vérifiez les erreurs de syntaxe instantanément. Fonctionne avec MySQL, PostgreSQL, SQL Server, Oracle.

Formateur et Validateur SQL

Formatez et validez des requêtes SQL avec indentation automatique, capitalisation des mots-clés et détection des erreurs de syntaxe.

Saisissez une requête SQL pour voir le résultat formaté.
Calculateur de chargement...
📚

Documentation

Qu’est-ce qu’un formateur et validateur SQL ?

Un outil de formatage SQL est un outil qui réécrit une requête SQL avec des espacements, des retours à la ligne et des mots-clés en majuscules uniformes, afin de la rendre plus facile à lire. Un validateur SQL vérifie cette même requête pour détecter des erreurs structurelles, comme une apostrophe non fermée ou une parenthèse manquante, sans se connecter à une base de données. Cet outil fait les deux. Il s’exécute entièrement dans le navigateur, de sorte que le texte de la requête n’est jamais envoyé à un serveur.

Comment formater une requête SQL

  1. Collez ou saisissez une requête SQL dans la zone de saisie.
  2. La version formatée apparaît automatiquement à droite, sans bouton à actionner.
  3. Les erreurs de validation apparaissent dans une liste sous le résultat.
  4. Un bouton de copie envoie la requête formatée dans le presse-papiers.

Règles de formatage SQL

Mise en majuscules des mots-clés

Le formateur met en majuscules une liste fixe de mots-clés SQL chaque fois qu’ils apparaissent en dehors d’une chaîne ou d’un identifiant entre guillemets. La liste couvre les principales clauses (SELECT, FROM, WHERE, GROUP BY, ORDER BY, HAVING, LIMIT, OFFSET), les mots-clés relatifs aux jointures (JOIN, LEFT, RIGHT, INNER, OUTER, FULL, CROSS, NATURAL, ON, USING), les opérateurs ensemblistes (UNION, INTERSECT, EXCEPT), les types d’instructions (INSERT, UPDATE, DELETE, CREATE, ALTER, DROP), ainsi que les opérateurs et connecteurs courants (AND, OR, NOT, IN, BETWEEN, LIKE, AS, CASE, WHEN, THEN, ELSE, END, ALL, DISTINCT, VALUES, SET, et quelques autres).

Certains mots qui ressemblent à des mots-clés sont conservés tels qu’ils ont été saisis. Les fonctions d’agrégation comme COUNT, SUM et AVG ne figurent pas dans la liste ; ainsi, count(*) reste en minuscules s’il a été saisi en minuscules. Les mots indiquant le sens du tri, ASC et DESC, ainsi que les littéraux autonomes TRUE, FALSE et NULL, sont également laissés inchangés. Le texte contenu dans une chaîne littérale ('...'), un identifiant entre guillemets ("...", `...` ou [...]) ou un commentaire n’est jamais modifié, quel que soit son contenu.

Retours à la ligne et indentation

Chaque clause principale commence sur une nouvelle ligne, en début de ligne : SELECT, FROM, WHERE, GROUP BY, ORDER BY, HAVING, LIMIT et OFFSET. Une jointure commence sur une nouvelle ligne en tant qu’unité ; ainsi, LEFT JOIN, FULL OUTER JOIN et CROSS JOIN restent ensemble au lieu d’être répartis sur deux lignes. UNION et UNION ALL sont précédés et suivis d’une ligne vide, ce qui sépare les requêtes qu’ils combinent. CASE et END commencent sur une nouvelle ligne, tandis que WHEN, THEN et ELSE commencent sur une ligne indentée. Chaque virgule provoque également un retour à la ligne ; une liste de colonnes dans SELECT ou GROUP BY se retrouve donc avec une colonne par ligne.

L’indentation apparaît uniquement à l’intérieur des parenthèses. Le contenu d’une sous-requête ou d’une expression groupée est décalé de deux espaces pour chaque niveau d’imbrication. Une requête sans parenthèses — la majorité des requêtes courantes — est formatée avec toutes les clauses alignées sur la marge gauche et sans aucune indentation.

Exemple : avant et après le formatage

Avant :

1select id, first_name, last_name, email from customers where status = 'active' order by last_name, first_name;
2

Après :

1SELECT id,
2first_name,
3last_name,
4email
5FROM customers
6WHERE status = 'active'
7ORDER BY last_name,
8first_name;
9

Chaque mot-clé est en majuscules et chaque clause et colonne se trouve sur sa propre ligne. Comme la requête ne contient pas de parenthèses, aucune ligne n’est indentée.

Les parenthèses modifient ce résultat. Le formatage de (select count(*) from employees e where e.department_id = d.id) dans une requête plus grande indente de deux espaces les éléments internes SELECT, FROM et WHERE, et laisse count en minuscules, car il s’agit d’un nom de fonction et non d’un mot-clé répertorié.

Ce que vérifie le validateur SQL

Le validateur recherche des problèmes structurels sans se connecter à une base de données :

  • Guillemets, crochets et commentaires non fermés. Une apostrophe ('), un guillemet double ("), une apostrophe inversée (`), un crochet ([) ou un commentaire de bloc (/*) ouvert mais jamais fermé.
  • Parenthèses déséquilibrées. Le nombre de ( et de ) en dehors des chaînes et des commentaires doit être identique.
  • Sous-requêtes sans parenthèses. Un deuxième SELECT situé en dehors de toute parenthèse, comme dans SELECT * FROM SELECT id FROM t. Deux requêtes reliées par un opérateur ensembliste (UNION, UNION ALL, INTERSECT, EXCEPT) ne sont pas signalées, car ces opérandes n’ont pas besoin de parenthèses. Il en va de même pour deux instructions séparées par un point-virgule.
  • WHERE commençant par AND ou OR. Un connecteur en tête de clause, sans rien avant lui.
  • JOIN sans condition correspondante. Une JOIN doit comporter une clause ON ou USING. CROSS JOIN et NATURAL JOIN font exception, car elles n’en prennent pas.
  • GROUP BY ou ORDER BY vide. Le mot-clé de clause sans colonne après lui, à la fin de la requête.
  • Condition WHERE incomplète. Une comparaison laissée en suspens, comme WHERE status = sans valeur, ou un WHERE seul sans rien après lui, à la fin de la requête.
  • Un SELECT sans FROM. Le signalement a lieu uniquement lorsque la liste de sélection contient de simples noms de colonnes. Une expression, un appel de fonction, un littéral ou une fonction renvoyant une valeur écrite sans parenthèses, comme CURRENT_DATE, est valide seul ; ainsi, SELECT 1 + 1 et SELECT CURRENT_DATE ne sont pas signalés.
  • Ordre des clauses. Deux vérifications précises sont effectuées : GROUP BY ne doit pas précéder WHERE et ORDER BY ne doit pas précéder GROUP BY. Ces vérifications sont effectuées au niveau supérieur de la requête, en ignorant le contenu des sous-requêtes.

Ce qu’il ne vérifie pas

Le validateur ne sait pas si les tables ou les colonnes existent réellement, si les colonnes jointes ont des types compatibles ni comment la requête s’exécutera. Il ne signale pas non plus toutes les règles appliquées par une véritable base de données. Deux exemples : HAVING utilisé sans GROUP BY est accepté, car regrouper l’ensemble du résultat en un seul groupe implicite est autorisé en SQL ; le validateur ne génère donc aucune erreur dans ce cas. De même, il ne vérifie pas que chaque colonne non agrégée de la liste SELECT figure également dans GROUP BY — cette règle existe dans la plupart des bases de données, mais cet outil ne la vérifie pas. L’absence d’un point-virgule final n’est pas non plus signalée, car le point-virgule sépare les instructions et ne fait pas partie d’une requête unique.

Exemple : erreurs détectées par le validateur

1SELECT id FROM orders
2JOIN users
3WHERE status =
4

Cette requête produit deux erreurs :

  1. « Une ou plusieurs instructions JOIN n’ont pas de condition ON. » — JOIN users ne comporte ni clause ON ni clause USING.
  2. « La condition WHERE est incomplète. » — status = n’a aucune valeur après le signe égal.

Foire aux questions

Cet outil fonctionne-t-il avec MySQL, PostgreSQL, SQL Server et Oracle ?

Il prend en charge la syntaxe SQL de base commune à ces bases de données : SELECT, JOIN, WHERE, GROUP BY et les clauses similaires. La syntaxe propre à une base de données, comme les littéraux de tableaux PostgreSQL ou les blocs procéduraux T-SQL, ne perturbera pas le formateur, mais pourrait ne pas bénéficier d’un traitement particulier.

La requête SQL est-elle envoyée à un serveur ?

Non. Le formatage et la validation s’exécutent tous deux dans le navigateur. Le texte de la requête n’est transmis nulle part.

Met-il les noms de fonctions tels que COUNT, SUM et AVG en majuscules ?

Non. Seuls les mots-clés de clause, les mots-clés de jointure et une liste fixe d’opérateurs sont mis en majuscules. Les noms de fonctions tels que count, sum et avg, ainsi que les mots asc, desc, true, false et null, sont laissés exactement tels qu’ils ont été saisis.

Le validateur signale-t-il l’utilisation de HAVING sans GROUP BY ?

Non. Une clause HAVING sans GROUP BY regroupe l’ensemble du résultat en un seul groupe, ce qui est valide en SQL selon la norme ISO/IEC 9075 ; le validateur ne la considère donc pas comme une erreur.

Le validateur peut-il détecter toutes les erreurs SQL ?

Non. Il vérifie la structure — parenthèses, guillemets, quelques règles d’ordre des clauses et certaines lacunes logiques courantes, comme une JOIN sans condition. Il ne vérifie ni les noms de tables ou de colonnes, ni les types de données, ni les performances de la requête. Une connexion à une base de données réelle reste nécessaire pour confirmer qu’une requête s’exécute correctement.

Le formatage modifie-t-il l’exécution d’une requête ?

Non. Le formatage ne modifie que les espaces et la mise en majuscules des mots-clés non placés entre guillemets. Tout ce qui se trouve dans une chaîne, un identifiant entre guillemets ou un commentaire est recopié sans modification ; la requête conserve donc exactement le même sens.

Références