Formater correctement les requêtes SQL

En informatique, le style d’indentation permet de mettre en forme le code pour qu’il soit plus lisible par les développeurs. En ajoutant des espaces, des tabulations et des retour à la ligne aux bons endroits, la lecture du code est plus facile, ce qui fait gagner du temps lors de la lecture du code par une tiers personne. Cet article présente des recommandations pour formater correctement les requêtes SQL.

Utiliser des guillemets simple pour chaque colonne et table

L’une des premières recommandations qui n’est pas toujours appliquée consiste à utiliser des guillemets simple (sur le clavier : touche alt gr + touche 7) autour de tous les mots-clés. Cela permet d’éviter des erreurs au cas où l’un des mots de colonne correspond involontairement au nom d’une commande SQL. Par exemple, si une table est appelée « where », cela peut poser des problèmes sachant que WHERE est aussi le nom d’une commande SQL.

Avant (requête en erreur)

SELECT date, timestamp
FROM where

Après

SELECT `date`, `timestamp`
FROM `where`

A noter : pour éviter de telles erreurs et pour faciliter la compréhension de la base de données il est suggéré de ne pas utiliser certains mots-clés dès la conception des tables qui constituent la base de données. Il y a plus d’une centaine de mots réservés quelques soit le système de base de données:

Retour à la ligne pour chaque commande

Mettre à la ligne chaque nouvelle commande d’une requête SQL est une méthode simple pour dissocier chaque élément qui la compose. Ainsi, la lecture d’une requête est plus claire. Cela permet aussi de réduire la largeur d’une requête pour éviter de scroller horizontalement afin de lire la requête en entier.

Avant

SELECT * FROM `utilisateur` WHERE `is_actif` = 1 ORDER BY `date_inscription`

Après

SELECT *
FROM `utilisateur`
WHERE `is_actif` = 1
ORDER BY `date_inscription`

Attention : il faut bien veiller à l’encodage des caractères pour être sûr que le retour à la ligne soit bien considéré comme un espace entre 2 commandes.

Pas de retour à la ligne non nécessaire

L’usage du retour à la ligne est à la ligne est pratique pour mieux repérer les éléments, mais trop l’utiliser peut nuire à la lisibilité du code au sein d’une application. En effet, l’écran d’ordinateur d’un développeur est limité en taille, s’il y a trop de retour à la ligne alors un code simple peut devenir très long en hauteur. A l’inverse, un code qui ne prend pas trop de place (en hauteur) sur l’écran permet de voir indirectement le code qui précède et qui suis à l’écran et ainsi avoir une meilleure vue d’ensemble du script tout en réduisant le nombre de fois où le développeur doit scroller.

Avant

SELECT
    *
FROM
    `table`
WHERE
    `colonne` = 1

Après

SELECT *
FROM `table`
WHERE `colonne` = 1

Formatage du WHERE avec 1 = 1 ou 1 != 1

Lorsqu’une requête possède de nombreuses conditions au sein de la commande WHERE, une astuce méconnue consiste à utiliser la condition « 1 = 1 » ou « 1 != 1 » pour uniformiser les requêtes.

Utilisation de WHERE 1 = 1

Avant

SELECT *
FROM `produits`
WHERE `en_stock` = 'oui'
AND `favoris` = 'oui'

Cette requête semble propre, mais en réalité c’est assez énervant de faire un code PHP (par exemple) propre pour préfixer correctement avec WHERE ou avec AND lorsqu’il faut changer les conditions de la requête. Il est possible d’uniformiser le code en utilisant « WHERE 1 = 1 ». De cette manière, chaque condition est présentée en utilisant l’opérateur logique AND.

Après

SELECT *
FROM `produits`
WHERE 1 = 1
AND `en_stock` = 'oui'
AND `favoris` = 'oui'

Cette requête est bien plus simple à mettre en oeuvre. Il est d’ailleurs possible de supprimer la ligne « AND en_stokc = ‘oui’ » juste en mettant en commentaire cette simple ligne, ou la supprimant, sans avoir à changer la structure de la requête.

A savoir : cela ne nuit pas aux performances.

Utilisation de WHERE 1 != 1

Il est possible d’utiliser la même astuce pour les commandes WHERE qui utilisent l’opérateur OR.

Avant

SELECT *
FROM `clients`
WHERE `nombre_achat` > 0
OR `client_premium` = 'oui'

Après

SELECT *
FROM `clients`
WHERE 1 != 1
OR `nombre_achat` > 0
OR `client_premium` = 'oui'

Utiliser des espaces plutôt que les tabulations pour indenter

Dans de nombreux langages de programmation, il est recommandé dans le code de ne pas utiliser de tabulations pour indenter le code. A la place il est suggéré d’indenter uniquement avec des espaces.

Le problème est du aux éditeurs de code qui affiche différemment les tabulations selon le logiciel utilisé. Ainsi, pour un même code, les tabulations seront plus ou moins large selon le logiciel utilisé, ce qui casse totalement l’affichage du code. Dès lors il faut prendre l’habitude d’indenter avec des espaces, en particulier sur les projets où plusieurs développeurs vont utiliser le même code.

Homogénéité

Quelque soit le style utilisé, il est plus qu’essentiel d’homogénéisé le style qui est utilisé par un développeur et l’équipe avec qui il travail. Cela permet de gagner du temps et d’éviter les erreurs. Par exemple, imaginez que vous oubliez pour une requête le retour à la ligne pour la commande WHERE. Un développeur qui va survoler rapidement le code ne remarquera peut-être pas la requête WHERE parce qu’il n’a pas l’habitude de lire cette commande à cet endroit.

Pour cette raison, il convient de se mettre d’accord sur la manière de formater les requêtes SQL, même si cela est différent que ce qui est préconisé dans cet article.

Ce contenu a été publié dans Bonnes pratiques.

A propos de l'auteur : Tony Archambeau

Fort de plusieurs années d’expérience dans le développement web, Tony partage ses connaissances sur des projets divers dont le site infowebmaster.fr.
Il est possible de le suivre sur Twitter.

Partager

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *