27th Nov 2023 9 minutes de lecture Que signifie ORDER BY 1 en SQL ? Dominika Florczykowska sql ORDER BY Table des matières Voyons ORDER BY 1 en action ! Ordre ascendant et descendant Que signifie ORDER BY 1, 2, 3 ? Attention : Ne pas utiliser la syntaxe ORDER BY 1 Curieux d'en savoir plus sur ORDER BY 1 ? Avez-vous déjà vu la syntaxe "ORDER BY 1" dans des requêtes SQL et vous êtes-vous demandé ce qu'elle signifiait ? Dans cet article, nous allons explorer cette syntaxe, clarifier son objectif et la rendre plus facile à comprendre. Que vous soyez un utilisateur expérimenté de SQL ou que vous commenciez à explorer ce langage, vous avez probablement déjà rencontré la clause ORDER BY. En SQL, la clause ORDER BY est utilisée pour trier les lignes d'une table en fonction d'une ou plusieurs colonnes. Elle vous permet de classer vos données par ordre croissant (A-Z, 1-10) ou décroissant (Z-A, 10-1) selon des critères spécifiques. Après la clause ORDER BY, vous spécifiez généralement la colonne par laquelle vous souhaitez trier les données. Cependant, vous serez peut-être surpris d'apprendre que vous pouvez également utiliser une syntaxe telle que ORDER BY 1 dans une requête SQL. La syntaxe d'une telle requête est la suivante : SELECT column_name(s) FROM table_name ORDER BY 1; Si vous avez déjà vu ce type de code dans des requêtes SQL et que cela vous a laissé perplexe, ne vous inquiétez pas ! À la fin de cet article, vous comprendrez exactement comment il fonctionne et quand l'utiliser. Et si vous avez besoin de vous rafraîchir la mémoire sur la syntaxe SQL tout en lisant cet article, n'hésitez pas à consulter notre feuille de contrôleSQL pour les débutants ! Pour devenir vraiment bon en SQL, vous devez vous entraîner. Si vous voulez travailler sur de nombreux problèmes pratiques, nous vous recommandons d'essayer notre parcours La pratique du SQL. Vous apprendrez en résolvant des problèmes réels, en utilisant notre éditeur de code en ligne et des ensembles de données réels. Ce parcours comprend neuf cours et plus de 1 100 exercices pratiques. Voyons ORDER BY 1 en action ! Imaginez que vous ayez un tableau appelé movie avec les colonnes suivantes : id - L'ID du film, qui est également la clé primaire (PK) de la table. title - Le titre du film. length - La durée du film en minutes. director - Le nom du réalisateur du film. year - L'année de sortie du film. rating - La note attribuée au film (de 1 à 10). Voici quelques lignes du tableau : idtitlelengthdirectoryearrating 1The Secret Quest110David Anderson20227 2Lost in Time95Emily Roberts20196 3Starship Odyssey150Michael Turner20218 4The Enchanted Forest85Sarah Johnson20227 5Epic Journey130Mark Lewis20207 6Space Explorers115Lisa Adams20227 7Time Travelers100Paul Miller20216 8Mystic Island140Jessica White20238 9The Great Discovery105Robert Green20217 10Underwater120Mary Johnson20216 Que se passe-t-il si nous exécutons la requête suivante ? SELECT title, length, director FROM movie ORDER BY 1; En spécifiant ORDER BY 1, nous demandons à la base de données de trier les résultats en fonction de la première colonne de la liste SELECT, qui est title dans ce cas. Cela signifie que la requête ci-dessus est équivalente à celle-ci : SELECT title, length, director FROM movie ORDER BY title; La première requête est un peu plus courte, mais elle peut être plus difficile à comprendre. Dans la deuxième requête, vous pouvez facilement voir quelle colonne est utilisée pour le tri. Cela réduit le risque d'erreur. Voici le résultat de notre requête : titlelengthdirector Epic Journey130Mark Lewis Lost in Time95Emily Roberts Mystic Island140Jessica White Space Explorers115Lisa Adams Starship Odyssey150Michael Turner The Enchanted Forest85Sarah Johnson The Great Discovery105Robert Green The Secret Quest110David Anderson Time Travelers100Paul Miller Underwater120Mary Johnson Si l'ordre des colonnes sélectionnées changeait, il faudrait utiliser un autre numéro de colonne : SELECT director, title, length FROM movie ORDER BY 2; Comme vous pouvez le constater, l'utilisation de cette syntaxe peut s'avérer quelque peu délicate. Saviez-vous que vous pouvez utiliser une syntaxe similaire dans la clause GROUP BY? Consultez notre article sur la syntaxe GROUP BY 1! Ordre ascendant et descendant Par défaut, la clause ORDER BY trie les résultats du plus petit au plus grand, c'est-à-dire par ordre croissant. Cependant, il peut arriver que vous ayez besoin de trier les données par ordre décroissant. Vous pouvez également le faire en utilisant la syntaxe ORDER BY 1. Il vous suffit d'ajouter le mot-clé ASC ou DESC après 1. Par exemple, si vous souhaitez récupérer la liste des films et la trier du plus long au plus court, vous pouvez exécuter une requête comme celle-ci : SELECT title, length, director FROM movie ORDER BY 2 DESC; La requête ci-dessus est l'équivalent de : SELECT title, length, director FROM movie ORDER BY length DESC; Et voici le résultat de notre requête : titlelengthdirector Starship Odyssey150Michael Turner Mystic Island140Jessica White Epic Journey130Mark Lewis Underwater120Mary Johnson Space Explorers115Lisa Adams The Secret Quest110David Anderson The Great Discovery105Robert Green Time Travelers100Paul Miller Lost in Time95Emily Roberts The Enchanted Forest85Sarah Johnson Que signifie ORDER BY 1, 2, 3 ? Dans notre exemple précédent, nous avons trié les données sur la base d'une seule colonne. À présent, nous souhaitons ordonner nos lignes en fonction de trois colonnes différentes : year, rating, et title. Pour ce faire, nous pouvons utiliser la requête suivante : SELECT year, rating, title FROM movie ORDER BY 1, 2, 3; Lorsque vous utilisez ORDER BY avec plusieurs colonnes, la base de données trie d'abord les lignes en fonction de la première colonne spécifiée. S'il y a des valeurs en double dans la première colonne, la base de données trie ensuite ces lignes en utilisant la deuxième colonne spécifiée, et ainsi de suite. Lorsque vous utilisez ORDER BY 1, 2, 3, vous demandez à la base de données de trier les résultats en fonction de la première, de la deuxième et de la troisième colonne de la liste SELECT. Cela revient à exécuter la requête suivante : SELECT year, rating, title FROM movie ORDER BY year, rating, title; Voici ce que la requête renvoie : yearratingtitle 20196Lost in Time 20207Epic Journey 20216Time Travelers 20216Underwater 20217The Great Discovery 20218Starship Odyssey 20227Space Explorers 20227The Enchanted Forest 20227The Secret Quest 20238Mystic Island La requête ci-dessus a trié les résultats par ordre croissant pour toutes les colonnes. Et si nous voulions trier les résultats par année, de la plus récente à la plus ancienne, puis par note, de la plus élevée à la plus basse, et enfin par titre, dans l'ordre alphabétique ? Nous pouvons faire tout cela en écrivant ASC ou DESC après chaque colonne : SELECT year, rating, title FROM movie ORDER BY 1 DESC, 2 DESC, 3 ASC; Le résultat de cette requête est le suivant : yearratingtitle 20238Mystic Island 20227Space Explorers 20227The Enchanted Forest 20227The Secret Quest 20218Starship Odyssey 20217The Great Discovery 20216Time Travelers 20216Underwater 20207Epic Journey 20196Lost in Time Notez que les numéros de colonne dans la clause ORDER BY ne doivent pas nécessairement être consécutifs. Vous pouvez également écrire une requête comme celle-ci : SELECT title, year, rating FROM movie ORDER BY 2 DESC, 3 DESC, 1 ASC; Nous demandons maintenant à la base de données de regrouper les résultats en fonction de la deuxième, de la troisième et de la première colonne de la liste SELECT. Vous pouvez également mélanger les numéros et les noms de colonnes dans une seule clause ORDER BY: SELECT title, year, rating FROM movie ORDER BY 2 DESC, 3 DESC, title ASC; Cette fois, nous regroupons les résultats en fonction des deuxième et troisième colonnes de la liste SELECT et de la colonne title. Les requêtes ci-dessus donnent les résultats suivants : titleyearrating Mystic Island20238 Space Explorers20227 The Enchanted Forest20227 The Secret Quest20227 Starship Odyssey20218 The Great Discovery20217 Time Travelers20216 Underwater20216 Epic Journey20207 Lost in Time20196 Attention : Ne pas utiliser la syntaxe ORDER BY 1 L'utilisation des syntaxes ORDER BY 1 et ORDER BY 1, 2, 3 en SQL est généralement considérée comme une mauvaise pratique car elle rend vos requêtes plus difficiles à lire et à maintenir. Bien qu'elle permette d'économiser de la frappe, elle peut également entraîner des problèmes inattendus. Le principal problème de cette approche est qu'elle s'appuie sur l'ordre des colonnes dans votre déclaration SELECT plutôt que de spécifier directement les noms des colonnes. Si l'ordre des colonnes change ou si de nouvelles colonnes sont ajoutées, les résultats de votre requête risquent d'être modifiés de manière inattendue. Par exemple, supposons que vous utilisiez la requête suivante pour obtenir la liste des films triés par année, de la plus récente à la plus ancienne, puis par note, de la plus élevée à la plus basse, et enfin par titre, dans l'ordre alphabétique : SELECT title, year, rating FROM movie ORDER BY 2 DESC, 3 DESC, 1 ASC; Imaginons maintenant que nous souhaitions également afficher le nom du réalisateur dans notre liste. Nous pouvons y parvenir en modifiant légèrement la requête : SELECT title, director, year, rating FROM movie ORDER BY 2 DESC, 3 DESC, 1 ASC; Mais lorsque nous exécutons cette requête, elle ne nous donne pas la bonne réponse ! Voici le résultat que nous obtenons : titledirectoryearrating The Enchanted ForestSarah Johnson20227 The Great DiscoveryRobert Green20217 Time TravelersPaul Miller20216 Starship OdysseyMichael Turner20218 UnderwaterMary Johnson20216 Epic JourneyMark Lewis20207 Space ExplorersLisa Adams20227 Mystic IslandJessica White20238 Lost in TimeEmily Roberts20196 The Secret QuestDavid Anderson20227 Il semble que les lignes ne soient pas triées par year, rating, et title comme prévu. Cela démontre les pièges potentiels liés à l'utilisation de l'ordre des colonnes au lieu de spécifier les noms des colonnes directement dans la clause ORDER BY. Pouvez-vous repérer l'erreur dans notre requête modifiée ? Le résultat est incorrect parce que nous avons essayé de trier nos lignes par les colonnes director, year, et title au lieu de l'année, de la note et du titre. La requête correcte serait la suivante : SELECT title, director, year, rating FROM movie ORDER BY 3 DESC, 4 DESC, 1 ASC; Mais nous pouvons éviter cette erreur en utilisant simplement la clause ORDER BY avec les noms complets des colonnes : SELECT title, director, year, rating FROM movie ORDER BY year DESC, rating DESC, title ASC; Désormais, même si nous décidons de modifier ou de déplacer des colonnes dans l'instruction SELECT, nous n'avons plus à nous préoccuper de la partie ORDER BY. Comme vous pouvez le constater, il est préférable de mentionner explicitement les noms des colonnes par lesquelles vous souhaitez effectuer un tri dans la clause ORDER BY. Cela rend votre requête plus facile à lire et moins susceptible de contenir des erreurs. L'astuce ORDER BY 1 convient lorsque vous ne faites que consulter des données par vous-même et que vous souhaitez accélérer la saisie. Mais si vous avez l'intention de réutiliser la requête d'une manière ou d'une autre, il est préférable d'utiliser la syntaxe complète avec les noms de colonnes. Curieux d'en savoir plus sur ORDER BY 1 ? C'est tout ce que nous avons pour aujourd'hui ! Si vous souhaitez en savoir plus sur l'utilisation de la clause ORDER BY, consultez nos articles pour apprendre à utiliser ORDER BY en détail et voir des exemples concrets d'utilisation de ORDER BY. Et pour plus de pratique, n'oubliez pas de consulter notre piste La pratique du SQL! Tags: sql ORDER BY