FmtDev
Langue
Retour au blog
25 mars 2026

Bonnes pratiques de formatage SQL : Écrivez des requêtes propres et maintenables

Apprenez à formater vos requêtes SQL pour la lisibilité, la maintenabilité et la collaboration en équipe. Couvre l'indentation, les conventions de nommage, le formatage des JOIN et les erreurs courantes.

Pourquoi le formatage SQL est important

SQL est l'un des langages les plus utilisés en développement logiciel. Chaque développeur backend, analyste de données et ingénieur DevOps écrit régulièrement des requêtes SQL.

Mais la plupart des requêtes SQL dans les bases de code en production ressemblent à ceci :

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

Ça fonctionne. La base de données n'en a rien à faire du formatage. Mais les humains, oui.

Quand une requête tient sur une seule ligne, elle est :

  • difficile à lire lors de la revue de code
  • difficile à débugger quand quelque chose casse
  • difficile à modifier quand les exigences changent
  • impossible à comprendre à 2h du matin pendant un incident

Un formatage SQL propre n'est pas une question d'esthétique. C'est une question de réduction du coût de compréhension du code.

Les bases : une clause par ligne

La règle de formatage la plus impactante est : placez chaque clause SQL majeure sur sa propre ligne.

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

Même requête. Même résultat. Mais maintenant vous pouvez instantanément voir :

  • quelles colonnes sont sélectionnées
  • quelles tables sont jointes
  • quelles conditions sont appliquées
  • comment les résultats sont ordonnés

Listes de colonnes

Quand vous sélectionnez plusieurs colonnes, mettez chacune sur sa propre ligne :

-- Mauvais
SELECT id, name, email, created_at, updated_at, status FROM users;

-- Bon
SELECT
  id,
  name,
  email,
  created_at,
  updated_at,
  status
FROM users;

Cela facilite :

  • l'ajout ou la suppression de colonnes
  • la mise en commentaire d'une seule colonne pour le débugage
  • la visualisation exacte des données récupérées

Formatage des JOIN

Les JOIN sont là où les requêtes deviennent complexes. Un formatage clair évite la confusion :

-- Mauvais
SELECT u.name,o.total,p.name FROM users u JOIN orders o ON u.id=o.user_id JOIN products p ON o.product_id=p.id WHERE o.status='completed';

-- Bon
SELECT
  u.name,
  o.total,
  p.name AS product_name
FROM users u
JOIN orders o
  ON u.id = o.user_id
JOIN products p
  ON o.product_id = p.id
WHERE o.status = 'completed';

Règles pour les JOIN :

  • chaque JOIN a sa propre ligne
  • la condition ON est indentée sous le JOIN
  • utilisez des types de JOIN explicites (INNER JOIN, LEFT JOIN) plutôt que simplement JOIN quand le type est important
  • donnez aux tables des alias courts et significatifs

Clauses WHERE

Pour les conditions multiples, indentez chaque condition :

-- Mauvais
WHERE status='active' AND created_at>'2025-01-01' AND total>100 AND country IN ('US','UK','FR')

-- Bon
WHERE status = 'active'
  AND created_at > '2025-01-01'
  AND total > 100
  AND country IN ('US', 'UK', 'FR')

Pour une logique complexe avec OR, utilisez des parenthèses clairement :

WHERE status = 'active'
  AND (
    country = 'US'
    OR country = 'UK'
  )
  AND total > 100

Sous-requêtes

Les sous-requêtes sont la partie la plus difficile à formater. La clé est une indentation cohérente :

SELECT
  u.name,
  u.email,
  order_summary.total_spent
FROM users u
JOIN (
  SELECT
    user_id,
    SUM(total) AS total_spent
  FROM orders
  WHERE status = 'completed'
  GROUP BY user_id
) AS order_summary
  ON u.id = order_summary.user_id
WHERE order_summary.total_spent > 1000
ORDER BY order_summary.total_spent DESC;

Règles :

  • indentez le corps de la sous-requête
  • fermez la parenthèse au même niveau que le mot-clé d'ouverture
  • donnez toujours un alias significatif aux sous-requêtes

Common Table Expressions (CTEs)

Pour les requêtes complexes, les CTEs sont plus propres que les sous-requêtes imbriquées :

WITH active_users AS (
  SELECT
    id,
    name,
    email
  FROM users
  WHERE status = 'active'
    AND last_login > '2025-01-01'
),
user_orders AS (
  SELECT
    user_id,
    COUNT(*) AS order_count,
    SUM(total) AS total_spent
  FROM orders
  WHERE status = 'completed'
  GROUP BY user_id
)
SELECT
  au.name,
  au.email,
  uo.order_count,
  uo.total_spent
FROM active_users au
JOIN user_orders uo
  ON au.id = uo.user_id
WHERE uo.total_spent > 500
ORDER BY uo.total_spent DESC;

Les CTEs rendent les requêtes complexes lisibles en les décomposant en étapes logiques nommées.

Conventions de nommage

Des conventions cohérentes évitent la confusion :

| Élément | Convention | Exemple | |---|---|---| | Tables | minuscules, pluriel | users, orders, products | | Colonnes | minuscules, snake_case | created_at, user_id, total_amount | | Alias | courts, significatifs | u pour users, o pour orders | | CTEs | snake_case descriptif | active_users, monthly_revenue | | Mots-clés SQL | MAJUSCULES | SELECT, FROM, WHERE, JOIN |

La règle la plus importante : soyez cohérent. Choisissez une convention et utilisez-la partout.

Formatage INSERT et UPDATE

-- INSERT
INSERT INTO users (
  name,
  email,
  status,
  created_at
) VALUES (
  'Alice',
  'alice@example.com',
  'active',
  NOW()
);

-- UPDATE
UPDATE users
SET
  status = 'inactive',
  updated_at = NOW()
WHERE last_login < '2024-01-01'
  AND status = 'active';

Commentaires en SQL

Utilisez les commentaires pour expliquer le pourquoi, pas le quoi :

-- Mauvais commentaire (explique le quoi)
-- Sélectionner les utilisateurs avec status actif
SELECT * FROM users WHERE status = 'active';

-- Bon commentaire (explique le pourquoi)
-- N'inclure que les utilisateurs actifs pour exclure
-- les comptes supprimés du rapport
SELECT * FROM users WHERE status = 'active';

Outils de formatage

Formater manuellement chaque requête est fastidieux. Utilisez un formateur pour faire le gros du travail, puis ajustez si nécessaire.

Lorsque vous utilisez un formateur SQL en ligne, faites attention à ce que vous collez. Si votre requête contient de vrais noms de tables, de colonnes ou de logique métier, vous exposez peut-être le schéma de votre base de données à un serveur tiers.

Utilisez un formateur qui fonctionne entièrement dans votre navigateur pour que vos requêtes ne quittent jamais votre machine.

Le Formateur SQL de FmtDev traite tout localement. Votre SQL ne quitte jamais votre navigateur.

Checklist de formatage SQL

  1. Une clause par ligne — SELECT, FROM, JOIN, WHERE, ORDER BY, LIMIT
  2. Une colonne par ligne dans les listes SELECT
  3. Indenter les conditions sous WHERE et ON
  4. Types de JOIN explicites — écrire INNER JOIN ou LEFT JOIN, pas juste JOIN
  5. Alias significatifsu pour users, pas t1
  6. Mots-clés en MAJUSCULES — SELECT, FROM, WHERE, JOIN
  7. Identifiants en minuscules — noms de tables, noms de colonnes
  8. CTEs plutôt que sous-requêtes pour la logique complexe
  9. Les commentaires expliquent le pourquoi, pas le quoi
  10. Formatez localement — ne collez jamais du SQL propriétaire dans des outils en ligne

Articles Connexes

Outil associé

Prêt à utiliser l'outil Formateur SQL Hors Ligne (Sans Log Serveur) ? Toute l'exécution est locale.

Ouvrir Formateur SQL Hors Ligne (Sans Log Serveur)