Pourquoi éviter de trier par positions ordinales en SQL ORDER BY

Trier par positions ordinales (ORDER BY 1,2) en SQL est possible, mais risqué : c’est illisible, fragile et source d’erreurs quand la structure change. Voici pourquoi privilégier les noms de colonnes pour un SQL robuste et clair.

3 principaux points à retenir.

  • Lisibilité : Ordre par colonne est plus clair qu’utiliser un simple 1 ou 2.
  • Maintenance : Modifier le SELECT peut invalider l’ordre si on trie par position.
  • Fiabilité : Requêtes peuvent donner des résultats inattendus si l’ordre des colonnes change.

Comment fonctionne ORDER BY avec des positions ordinales en SQL

La commande ORDER BY en SQL, c’est un peu le chef d’orchestre de vos données. Souhaitez-vous que votre symphonie de résultats soit jouée dans un ordre maîtrisé ? Aucun problème ! Une de ses particularités, c’est d’accepter des numéros de colonne pour trier – simple et efficace. Oui, ces fameuses positions ordinales, qui paraissent presque magiques par leur simplicité. Imaginez un peu : vous voulez trier par la première colonne de votre requête. Eh bien, un petit ORDER BY 1, et le tour est joué. Ce chiffre fait référence à la position de la colonne dans la liste de votre clause SELECT.

Regardons un exemple concret. Supposons que vous ayez une table clients et que vous souhaitiez trier par le nom de famille, qui est la troisième colonne dans votre sélection :

SELECT id, prénom, nom, ville FROM clients ORDER BY 3;

Dans ce cas, la requête tri les résultats par le nom de famille, même si, théoriquement, on pourrait avoir l’impression d’invoquer une sorte de sortilège en parlant simplement du chiffre « 3 ». Ça fonctionne dans la plupart des moteurs SQL, en effet. MySQL, PostgreSQL, SQL Server et même Oracle supportent cette fonctionnalité, ce qui explique pourquoi tant de développeurs se laissent séduire par cette approche… un peu trop facile, n’est-ce pas ?

Il y a quelque chose de séduisant dans le fait de ne pas avoir à taper le nom complet d’une colonne. Cela pourrait sembler être un gain de temps. En revanche, nous verrons bientôt que cette simplicité peut avoir ses revers, car une petite maladresse dans cette approche pourrait vous coûter cher. Qui ne veut pas éviter les pièges cachés de l’ORDRE ? On pourrait presque le nommer « L’Antichambre des Erreurs » dans le vaste monde du SQL.

Quand vous utilisez des positions ordinales, ne perdez pas de vue que votre requête peut devenir peu lisible, tant pour vous que pour vos collègues. Mais bon, gardons cela pour plus tard. Pour l’instant, savourez la facilité d’utilisation des positions ordinales sous le doux ciel SQL. Mais croyez-moi, la suite ne vous laissera pas indifférent. Il y a des histoires à raconter sur leurs défauts qui vous donneront matière à réflexion.

Quels sont les dangers réels d’utiliser les positions ordinales dans ORDER BY

Utiliser des positions ordinales dans une clause ORDER BY en SQL, c’est comme naviguer en pleine tempête avec une boussole qui indique toujours le Nord, même quand vous voulez aller au Sud. Ça fait joli dans le code, mais la réalité, c’est que ça devient vite le cauchemar de l’angoissé du système. Détaillons les dangers qui se cachent derrière cette pratique.

1. Lisibilité réduite: Quand vous croisez un ORDER BY 1, il n’y a qu’un mot qui traverse l’esprit : pourquoi ? Ça ne parle pas, ça ne vend pas. Alors que ORDER BY id est on ne peut plus clair. Penser à un collègue (ou à vous-même !) cherchant le sens d’un code illisible, c’est s’exposer à des migraines assurées lors des sessions de debug. Qui aurait envie de passer son temps à déchiffrer une énigme posée par d’autres ? C’est ce qu’on appelle “faire le grand écart vers l’inefficacité”.

2. Fragilité accrue: Imaginez, un jour, votre colonne nom prend la place de id dans la liste de votre SELECT. Pas de souci, vous êtes encore là… jusqu’à ce que vous vous rendiez compte que votre ORDER BY 2 trahit votre requête. Voilà, vous avez juste décapité votre SQL, et c’est l’arbitre qui siffle la fin du match sans expliquer pourquoi ! La fragilité due aux positions ordinales est comparable à jouer à un casse-brique avec une balle de tennis : plaisant au début, mais rapidement frustrant !

3. Résultats erronés: Si vous ajoutez, supprimez ou réorganisez des colonnes dans votre SELECT, sans revoir vos positions ordinales, préparez-vous à des révélations surprenantes (ou désastreuses). Prenons un exemple. Supposons que vous ayez :

SELECT id, nom, age FROM clients ORDER BY 1;

Un beau jour, vous décidez d’intercaler une colonne email entre nom et age. Attendez-vous à voir vos données dans un beau désordre. Le résultat va tirer un grand trait sur la fiabilité des infos récupérées, laissant vos critères de tri en slip sur le côté de la route.

Pour les experts comme Tamas Ujhelyi, la question est simple : privilégiez la clarté, cela fait gagner un temps fou. Après tout, la vie est trop courte pour se casser la tête sur des querelles ordinales. En fin de compte, adopter de meilleures pratiques SQL comme ceux-là fait de notre code une œuvre d’art plutôt qu’un gribouillage d’enfant. Les mots d’ordre sont : visibilité, contrôle et pérennité.

N’oubliez pas : en SQL, comme dans la vie, il vaut mieux « tracer sa route » que de « suivre les flèches » (même si parfois c’est tentant). Pour plus d’infos solides sur le sujet, consultez cet article.

Comment bien trier en SQL pour éviter ces pièges et écrire un code propre

Quand il est question de trier en SQL, une des règles d’or devrait être l’utilisation des noms de colonnes dans la clause ORDER BY. Imaginez-vous un peu : vous venez de rédiger une requête qui fait appel à plusieurs colonnes et, dans le feu de l’action, au lieu d’opter pour une approche lisible, vous avez choisi de jouer à Twister avec les positions ordinales. Voici un petit rappel : ce n’est pas parce que c’est possible que c’est toujours judicieux.

En utilisant des noms de colonnes, vous vous assurez d’une clarté indiscutable qui facilite la maintenance de votre code. En cas de modification ultérieure de la requête, une simple modification de la colonne suffit, sans trop de complications. Cela réduit aussi le risque d’accidents causés par des changements dans l’ordre des colonnes dans la clause SELECT, qui peuvent transformer un ORDER BY 1 inoffensif en un véritable désastre !

Voici un exemple pour illustrer cela :

-- Trier par position ordinal
SELECT nom, age, ville FROM utilisateurs ORDER BY 2;

-- Trier par nom de colonne
SELECT nom, age, ville FROM utilisateurs ORDER BY age;

Dans le premier cas, notre ami le ORDER BY 2 fait référence à la colonne age, mais qu’adviendra-t-il si dans le futur, vous décidez d’ajouter une nouvelle colonne avant ? Cela compliquerait tout ! Avec le second exemple, même si la structure change, ORDER BY age est là, bien en place, comme un phare dans la nuit de la data.

Ne vous arrêtez pas là ! N’oubliez pas aussi d’utiliser des alias si vous traitez des colonnes dérivées ou calculées. Cela vous permettra d’avoir un code encore plus lisible. Au lieu de donner l’impression que l’on parle en charabia, vous invitez le lecteur à une discussion intelligible.

Méthode Avantages Inconvénients
ORDER BY Position Ordinale Code court Risque de confusion, dépend des colonnes
ORDER BY Noms de Colonnes Clarté, robustesse, maintenable Peut être plus long

Pour parfaire votre compréhension, n’hésitez pas à plonger dans la documentation de Microsoft sur la clause ORDER BY. Elle regorge de détails qui enrichiront votre expertise et vous éviteront de mordre dans la poussière à cause d’un code fouillis !

Faut-il vraiment abandonner les positions ordinales dans ORDER BY en SQL

Utiliser les positions ordinales dans ORDER BY peut sembler pratique au départ, mais c’est un piège sournois qui complique la maintenance et nuit à la fiabilité de vos requêtes. Privilégier le tri par nom de colonne évite les mauvaises surprises, améliore la lisibilité et sécurise votre code sur le long terme. Vous y gagnez en robustesse et sérénité, ce qui est justement le but quand on travaille les données sérieusement.

FAQ

Qu’est-ce que trier par positions ordinales dans ORDER BY ?

Cela signifie utiliser des chiffres pour indiquer l’ordre des colonnes sélectionnées dans un SELECT, comme ORDER BY 1 pour trier selon la première colonne.

Pourquoi éviter ORDER BY 1, 2 dans mes requêtes SQL ?

Parce que cela rend votre code moins lisible et fragile : des modifications dans la liste SELECT peuvent modifier complètement l’ordre ou casser la requête.

Utiliser les noms de colonnes améliore-t-il vraiment la lisibilité ?

Oui, utiliser les noms de colonnes rend vos intentions explicites et votre code plus facile à comprendre et maintenir, notamment dans des projets complexes ou collaboratifs.

Y a-t-il des cas où ORDER BY position est acceptable ?

Peut-être dans des requêtes rapides ou ad hoc, mais en production et pipelines, c’est à proscrire au profit des noms de colonnes.

Comment éviter les erreurs liées au tri dans mes requêtes SQL ?

Privilégiez toujours les noms de colonnes ou alias explicites dans ORDER BY, testez vos requêtes après toute modification et documentez votre code pour éviter les mauvaises surprises.

 

 

A propos de l’auteur

Franck Scandolera, consultant expert en Web Analytics, Data Engineering et automatisation, accompagne depuis plus de dix ans des professionnels dans la maîtrise du traitement des données. Responsable de l’agence webAnalyste et formateur indépendant, il démocratise les bonnes pratiques du SQL et des outils analytiques (BigQuery, GA4) avec une approche pragmatique et axée résultats business.

Retour en haut