Home » Analytics » Faut-il éviter d’utiliser ORDER BY par positions ordinales en SQL ?

Faut-il éviter d’utiliser ORDER BY par positions ordinales en SQL ?

Utiliser ORDER BY avec des positions ordinales (ORDER BY 1, 2) en SQL est une mauvaise idée. Moins lisible et fragile, cette méthode peut provoquer des erreurs cryptiques quand vous modifiez votre requête. Voici pourquoi vous devriez privilégier l’ordre par noms de colonnes, clair et robuste.

3 principaux points à retenir.

  • Lisibilité: ORDER BY 1 est cryptique face à ORDER BY nom_colonne.
  • Fiabilité: Modifier le select casse les requêtes avec positions ordinales.
  • Maintenance: Changer l’ordre des colonnes dans SELECT modifie les résultats inopinément.

Pourquoi choisir ORDER BY avec noms plutôt qu’ordinales

Alors, pourquoi sur cette terre incroyable, devrions-nous préférer ORDER BY avec des noms de colonnes plutôt qu’avec ces fameuses positions ordinales, du genre ORDER BY 1, 2? Parce que c’est une pratique qui relève davantage de la sagesse que d’une simple option technique. Plutôt que de plonger dans un abîme d’incompréhensions et de surprises, choisir les noms de colonnes est non seulement plus fiable, mais cela rend également le code bien plus lisible.

Imaginez que vous travaillez sur une requête SQL un brin capricieuse. Vous faites un SELECT de multiples colonnes et, dans un moment d’inattention, vous décidez d’ajouter une colonne ou d’en modifier l’ordre. Puis, la terre s’écroule ! Votre ORDER BY 1, 2 n’a soudain plus aucun sens, comme un mail de votre boss à 18h30 un vendredi. Par contre, si vous aviez utilisé ORDER BY nom_colonne, la clarté serait au rendez-vous, et même les changements d’humeur des colonnes n’affecteraient pas la logique de tri. Vous éviteriez des erreurs inattendues dues à des modifications ultérieures.

Prenons un exemple simple. Supposons que vous ayez une requête :

SELECT nom, age, ville FROM utilisateurs ORDER BY 1;

Dans ce cas, « 1 » correspond à la colonne « nom ». Mais si quelqu’un décide d’ajouter une nouvelle colonne « email » au début ? Surprise ! Vous triez maintenant par « age » sans même le réaliser. En revanche, si vous aviez fait :

SELECT nom, age, ville FROM utilisateurs ORDER BY nom;

Eh bien, cette fois, il n’y a pas de place pour la confusion. Vous êtes encrés dans votre vérité, et quoi qu’il arrive, votre requête reste cohérente.

À ce propos, en production, où la rigueur est une nécessité absolue, opter pour les noms de colonnes se transforme presque en mantra. Imaginez la tranquillité d’esprit que vous ressentirez lorsque, des mois plus tard, vous revisitez ce code. « Ah, oui, c’est bien ça ! » Pas de casse-tête, juste de l’ordre ! Un exemple tiré de la pratique illustre cela parfaitement : le monde du data engineering considère cette méthode comme un standard, et même des géants comme Microsoft en font l’éloge dans leur documentation ici.

En somme, privilégier les noms de colonnes dans votre ORDER BY est une décision qui s’inscrit dans une logique de durabilité, de clarté et de prévoyance. Comme on dit dans le milieu, mieux vaut prévenir que guérir… ou dans notre cas, mieux vaut triompher qu’être embarrassé par un tri illogique !

Quels risques réels cachent les positions ordinales en ORDER BY

Vous avez déjà entendu l’expression « ce qui se cache derrière les apparences » ? Eh bien, en SQL, il en va de même avec l’utilisation des positions ordinales dans l’instruction ORDER BY. Si vous êtes du genre à utiliser les positions ordinales sans réfléchir, préparez-vous à une sacrée dégringolade dans le monde des requêtes.

Imaginez cela : vous avez une requête que vous considérez comme parfaitement fonctionnelle, par exemple :

SELECT nom, age, ville FROM utilisateurs ORDER BY 1, 2;

Ici, vous ordonnez vos résultats par nom et par âge. Parfait, n’est-ce pas ? Peut-être pas. Imaginez maintenant que, pour une raison obscure (comme le goût magnanime d’un développeur qui se prend pour Picasso), on décide d’ajouter une nouvelle colonne à la sélect, par exemple email :

SELECT nom, age, email, ville FROM utilisateurs ORDER BY 1, 2;

Boom ! Les ordres ont changé ! Vous avez maintenant trié par nom et par email au lieu de nom et age. Si vous êtes chanceux, vous aurez seulement des résultats qui auront l’air étranges. Si vous êtes comme moi, préparé au mieux mais toujours pris par surprise, attendez-vous à découvrir des bugs qui surgissent comme des fantômes dans une pièce sombre de château.

Et ce n’est pas tout. Modifier l’ordre des colonnes peut également engendrer des conséquences insoupçonnées. Vous changez deux colonnes de place dans votre SELECT :

SELECT age, nom, ville FROM utilisateurs ORDER BY 1, 2;

Là, vous vous retrouvez à trier par age puis par nom. Alors, direz-vous, ce n’est pas si dramatique ? Peut-être, mais dans un gros projet où vous avez des centaines de requêtes, des équipes et un nombre incalculable de clients, ces petites variations peuvent mener à du sabotage involontaire de la logique métier. On parlerait presque ici de la fourmi qui se traîne sur une autoroute, si elle est sur le bon chemin, super, mais si elle se retrouve au milieu des roues d’un camion…

Au final, ces positions ordinales, bien qu’elles puissent sembler séduisantes pour leur concision, sont en réalité des nids à problèmes, tant sur le plan fonctionnel qu’en matière d’entretien du code. Cela demande un effort supplémentaire pour maintenir la clarté et la cohérence de vos requêtes. Un coût en temps et en énergie qu’il serait peut-être plus sage d’éviter.

Quand et comment utiliser ORDER BY par positions ordinales sans risque

Ah, l’énigmatique commande ORDER BY et ses glorieux chiffres ! Quand il s’agit de trier vos données, certains d’entre nous n’hésitent pas une seconde à sortir le vieux ORDER BY 1, ORDER BY 2 comme s’ils commandaient un café au bar du coin. Cela peut sembler tentant, n’est-ce pas ? Surtout quand on est en mode « je fais ça rapido ». C’est un peu comme utiliser un raccourci : rapide, efficace, mais à quel prix ?

Dans certains cas, cette méthode peut se justifier. Imaginons que vous écriviez un petit script ad hoc pour explorer rapidement un jeu de données. Peut-être que vous êtes en train de réaliser une démonstration ou d’exécuter des requêtes temporaires que vous ne prévoyez pas de modifier prochainement. Dans ces situations, ORDER BY 1, 2 peut sembler inoffensif, voire même judicieux. Vous gagnez du temps, et ça marche.

  • Conseil n°1 : documentez bien votre requête. Notez votre intention, expliquez votre logique. C’est un peu comme laisser une note d’amour à votre futur vous qui pourrait retrouver ce code dans trois mois.
  • Conseil n°2 : évitez les modifications fréquentes. Si vous savez que ce code va changer tous les cinq jours, ne mettez pas la barre si haut, utilisez plutôt des alias explicites.
  • Conseil n°3 : faites des revues de code rigoureuses. Si vous ne voulez pas qu’un collègue se retrouve avec un code incompréhensible, mettez-vous à deux pour éplucher ce qu’il y a dedans.

Et c’est là qu’intervient la solution intermédiaire : utilisez des alias explicites dans le SELECT. Par exemple, au lieu de dire ORDER BY 1, vous pouvez faire ORDER BY nom_colonne. Cela rend la requête à la fois concise et clair. Ne pas oublier que la lisibilité et l’entretien du code sont également essentiels !

Rappelez-vous bien, cependant, que dans un environnement de production, le ORDER BY par positions ordinales n’est pas quelque chose que vous devriez considérer comme une bonne pratique. Ne jouez pas au jeu du hasard avec vos données ; elles méritent mieux. Si vous voulez approfondir le sujet, jetez un œil à cette documentation qui pourrait vous éclairer davantage.

Alors, faut-il définitivement renoncer à ORDER BY par positions ordinales en SQL ?

Utiliser ORDER BY avec des positions ordinales est un raccourci trompeur, source d’erreurs sournoises et de code difficile à maintenir. La pratique expose vos requêtes à des bugs non détectés, notamment en production où la robustesse est cruciale. Optez pour un ORDER BY explicite avec les noms ou alias de colonnes : clairement plus lisible, plus sûr, plus professionnel. Vous gagnerez en fiabilité, en clarté et en temps de maintenance, ce qui vaut bien quelques frappes supplémentaires au clavier. Un petit investissement d’attention pour un gros retour en qualité.

FAQ

Pourquoi ORDER BY 1 est-il moins lisible ?

Parce qu’il réfère à la position de la colonne dans la clause SELECT, sans indiquer clairement de quelle colonne il s’agit, rendant la lecture et la compréhension immédiate de la requête difficiles.

Quels problèmes entraîne l’usage d’ORDER BY avec des positions ordinales ?

Modifier la sélection des colonnes peut changer la position des colonnes, ce qui casse la requête ou modifie son ordre de façon inattendue, entraînant des bugs difficiles à détecter.

Dans quels cas utiliser malgré tout ORDER BY 1, 2 ?

Pour des requêtes rapides, temporaires ou d’exploration où la lisibilité et la robustesse sont moins critiques. Toujours avec prudence et documentation.

Comment sécuriser l’usage des positions ordinales dans ORDER BY ?

En limitant les modifications à la clause SELECT, en documentant clairement la requête, ou en utilisant des alias explicites dans SELECT pour mieux gérer les positions.

Pourquoi préférer les noms/alias en ORDER BY en production ?

Ils garantissent une requête plus stable et lisible, réduisent les risques d’erreurs liées aux modifications futures, et facilitent la maintenance et la revue de code, essentiels en environnement professionnel.

 

 

A propos de l’auteur

Franck Scandolera, consultant indépendant et formateur depuis plus de dix ans, est expert en Web Analytics, Data Engineering et automatisation. À la tête de l’agence webAnalyste, il accompagne des professionnels dans la maîtrise du SQL, BigQuery et la structuration fiable des pipelines data, garantissant ainsi des analyses robustes et sans surprise. Passionné par la clarté du code et l’efficacité métier, Franck milite pour des pratiques rigoureuses et pérennes en data.

Retour en haut
Data Data Boom