Comment formater des requêtes SQL

· 7 min de lecture

Le SQL desordonne est l'un des moyens les plus rapides d'introduire des bogues. Lorsqu'une requete est une seule longue ligne sans indentation, il est difficile de voir quelles conditions s'appliquent a quelles jointures, ou commencent et se terminent les sous-requetes, ou si la logique est correcte. Un formateur base sur navigateur gere tout le travail localement sans televerser vos requetes sur un serveur.

Pourquoi le formatage est important

Comment formater le SQL

  1. Collez votre SQL : entrez une requete minifiee ou desordonnee dans le formateur. Il gere SELECT, INSERT, UPDATE, DELETE, CREATE TABLE, et les requetes complexes avec des sous-requetes et des jointures.
  2. Configurez les options : choisissez la taille d'indentation et si vous voulez les mots-cles en majuscules. Ces parametres correspondent au guide de style de votre projet.
  3. Copiez le resultat : le SQL formate est pret a etre colle de retour dans votre editeur, client de base de donnees ou documentation.

A quoi ressemble un bon formatage

Une requete comme select u.name, o.total from users u join orders o on u.id = o.user_id where o.total > 100 and u.active = 1 order by o.total desc devient :

SELECT
  u.name,
  o.total
FROM users u
JOIN orders o
  ON u.id = o.user_id
WHERE o.total > 100
  AND u.active = 1
ORDER BY o.total DESC

Chaque clause commence sur sa propre ligne. Les conditions sont indentees sous leur clause parente. Les jointures et leurs conditions ON sont clairement appariees.

Une breve histoire des conventions de formatage SQL

SQL a ete cree par les chercheurs IBM Donald Chamberlin et Raymond Boyce en 1974, initialement appele SEQUEL (Structured English Query Language). Le «QL» dans le nom original refletait l'intention que le langage se lise comme l'anglais. Des le debut, cette conception lisible par l'humain impliquait une convention : indentez vos clauses pour qu'elles se lisent de haut en bas comme des phrases.

Pendant la plus grande partie des annees 1980 et 1990, le SQL etait ecrit a la main dans des editeurs de texte et le formatage etait personnel. Certains ateliers ont adopte le «style fleuve» (ou chaque mot-cle s'aligne verticalement a droite d'une colonne virtuelle), d'autres ont utilise le «style egyptien» (equivalent accolade-sur-la-meme-ligne), et la plupart utilisaient simplement ce que l'auteur preferait.

Le premier formateur SQL largement utilise etait Apex SQL Formatter (2000), suivi de SQL Complete de Devart (2002) et SQL Prompt de Red Gate (2003). Ces outils ont apporte le formatage de niveau IDE aux developpeurs SQL Server et Oracle. D'ici 2010, chaque IDE majeur (SSMS, DataGrip, DBeaver) avait un formatage SQL integre, et les formateurs en ligne sont devenus standard pour le nettoyage ad hoc.

En 2017, l'ecosysteme des formateurs a change avec sql-formatter (npm), une bibliotheque JavaScript open-source qui alimente la plupart des formateurs SQL bases sur navigateur aujourd'hui, y compris celui-ci. Les formateurs modernes gerent les differences de dialectes (backticks MySQL, fonctions de fenetre PostgreSQL, crochets carres SQL Server) et produisent une sortie coherente et configurable.

Guides de style SQL utilises par les grandes entreprises

La plupart des bases de code professionnelles suivent l'un des plusieurs guides de style SQL publies :

Guide de styleOrigineConventions cles
Mozilla SQL StyleMozillaMots-cles MAJUSCULES, noms snake_case, indentation 2 espaces
GitLab SQL StyleGitLab Data TeamMots-cles MAJUSCULES, noms minuscules, indentation 4 espaces, virgules en tete
Holistics SQL StyleHolisticsMots-cles MAJUSCULES, snake_case, 2 espaces, virgules en fin
Simon Holywell SQLPersonnel/populaireAlignement «fleuve», mots-cles majuscules
dbt SQL Styledbt LabsMots-cles minuscules (dialecte moderne), snake_case, virgules en tete
PostgreSQL Wiki StyleCommunaute PostgreSQLMots-cles minuscules, snake_case, indentation style K&R

Si vous demarrez un nouveau projet, choisissez l'un des guides etablis. Si vous rejoignez une base de code existante, suivez ce qui est deja la. La coherence au sein d'un projet importe plus que tout style specifique.

Choix de formatage courants

Differences de dialectes

Les formateurs SQL doivent gerer la syntaxe specifique aux dialectes :

DialecteCaracteristiques distinctives
PostgreSQLFonctions de fenetre, LATERAL JOINS, chaines entre dollars ($$), style intensif en CTE
MySQL/MariaDBIdentifiants en backticks, syntaxe de clause LIMIT, REPLACE INTO
SQL Server (T-SQL)Identifiants entre crochets, clause TOP, clause OUTPUT, MERGE
Oracle (PL/SQL)Table DUAL, ROWNUM, CONNECT BY hierarchique, appels de package suffixes par point
SQLiteSysteme de types limite, REPLACE/UPSERT, base de donnees a fichier unique
SnowflakeTypes de donnees variants, clause QUALIFY, COPY INTO
BigQueryIdentifiants en backticks, types ARRAY/STRUCT, listes de colonnes EXCEPT/REPLACE
RedshiftDerive de PostgreSQL mais DDL distinctif, COPY depuis S3

Un bon formateur detecte ou accepte un indice de dialecte, puis gere la syntaxe que d'autres dialectes rejetteraient.

Pieges courants

Conseils

Confidentialite et requetes sensibles

Le formateur SQL s'execute entierement dans votre navigateur. Les requetes que vous collez, le traitement intermediaire et la sortie formatee restent tous sur votre appareil. Rien n'est televerse sur un serveur, enregistre ou partage avec qui que ce soit.

Cela importe car les requetes SQL contiennent souvent des informations extremement sensibles : noms de tables qui revelent l'architecture du produit, noms de colonnes qui exposent la logique metier et les metriques, vrais ID clients dans les clauses WHERE, points de terminaison d'API internes dans les procedures stockees, SSN et numeros de cartes de credit dans les donnees de test, remuneration des employes dans les requetes RH, chiffres financiers dans les requetes d'analyse, adresses e-mail des clients dans les requetes marketing. Les formateurs SQL en nuage enregistrent chaque requete dans leurs journaux de requetes, les conservent parfois pour «amelioration du service», et ont ete impliques dans de vraies breches ou des requetes de production collees ont fui des schemas et donnees sensibles. Un formateur base sur navigateur a une exposition nulle : la requete ne quitte jamais votre machine.

Le formatage base sur navigateur fonctionne aussi hors ligne une fois la page chargee, utile pour formater des requetes dans les avions, dans des environnements securises sans acces internet, ou partout ou vous ne pouvez pas ou ne devriez pas coller une requete de base de donnees dans un service tiers.

Questions fréquentes

Faut-il écrire les mots-clés SQL en majuscules ?

C'est une convention largement suivie d'écrire les mots-clés SQL en majuscules (SELECT, FROM, WHERE) et les noms de tables ou colonnes en minuscules. Cela rend les requêtes plus faciles à lire visuellement. La plupart des guides de style le recommandent, mais aucun moteur de base de données ne l'impose.

Le formatage change-t-il l'exécution de la requête ?

Non. Les espaces et l'indentation n'ont aucun effet sur l'exécution SQL. Le formatage est purement pour la lisibilité humaine. Une requête minifiée et une indentée produisent le même résultat.

Quelle taille d'indentation utiliser ?

Deux ou quatre espaces sont tous deux courants. Choisissez ce que votre équipe utilise et restez cohérent. La plupart des formateurs SQL permettent de le configurer.

Mon SQL est-il envoyé sur un serveur ?

Non. Le formatage se fait entièrement dans votre navigateur. Vos requêtes ne quittent jamais votre appareil.