Cours SQL et MySQL · Module 2: Interroger les données (SELECT)

ORDER BY - ranger les parchemins

4 min de lecture
Dans cette leçon3

Un rayon brut renvoie les parchemins sans ordre particulier - dans l'ordre où ils se trouvent. Aujourd'hui, ce peut être l'ordre d'ajout au catalogue ; demain, après un rangement des étagères, un tout autre. Or une lectrice au pupitre demande : « Montre-moi les livres, du plus récent au plus ancien ». ORDER BY te permet de ranger les parchemins - du plus ancien, du moins cher, par ordre alphabétique - comme ton cœur le désire.

Ordre croissant et décroissant

On ajoute ORDER BY après le nom du rayon, suivi du champ selon lequel la Bibliothèque doit ranger les lignes. Par défaut, le tri est croissant (ASC, de l'anglais ascending). Si tu ne précises aucune direction, la Bibliothèque rangera quand même les parchemins par ordre croissant - la requête ci-dessous donne le même résultat avec ASC et sans lui :

1SELECT tytul, rok_wydania
2FROM ksiazki
3ORDER BY rok_wydania ASC;

Les éditions les plus anciennes sont en haut. Voici les cinq premières lignes sur dix-sept :

tytulrok_wydania
Antygona1985
Medea1985
Ajaks1985
Iliada1990
Odyseja1990
……

Trois livres sont parus en 1985. Leur ordre entre eux n'est pas fixé - la Bibliothèque peut les donner dans un autre ordre. Tu verras dans la prochaine leçon comment départager ces égalités.

Pour inverser l'ordre - du plus grand au plus petit - utilise DESC (de descending). Seul le dernier mot change :

1SELECT tytul, rok_wydania
2FROM ksiazki
3ORDER BY rok_wydania DESC;

Cette requête montre les livres du plus récent au plus ancien, exactement ce que voulait la lectrice :

tytulrok_wydania
Tom Sawyer2020
Hamlet2020
Pan Tadeusz2015
Dziady2015
Etyka2012
……

Les nombres se rangent selon leur valeur : 2020 est plus grand que 2015, il est donc plus haut. Et voici comment ranger les livres du moins cher au plus cher :

1SELECT tytul, cena
2FROM ksiazki
3ORDER BY cena ASC;

Les copies les moins chères sont en haut de la liste :

tytulcena
Ajaks18.50
Antygona19.90
Medea21.00
Dziady24.50
Hamlet27.00
……

Le texte et les champs vides

MySQL range le texte par ordre alphabétique. Avec ses réglages par défaut, MySQL 8 ne distingue pas ici les majuscules des minuscules : « hamlet » et « Hamlet » se retrouvent côte à côte. Les champs vides, c'est-à-dire NULL, sont traités par MySQL comme plus petits que toute autre valeur : avec ASC ils viennent en premier, avec DESC en dernier.

Où se place ORDER BY ?

Toujours après FROM, vers la fin de la requête. Voici comment ranger les auteurs par ordre alphabétique de nom :

1SELECT imie, nazwisko FROM autorzy ORDER BY nazwisko ASC;

Les noms suivent l'ordre alphabétique, d'Arystoteles à Twain :

imienazwisko
ArystotelesArystoteles
EuklidesEuklides
HomerHomer
AdamMickiewicz
PlatonPlaton
HenrykSienkiewicz
SofoklesSofokles
MarkTwain

Deux erreurs sont ici les plus fréquentes :

  • ORDER BY avant FROM. SELECT imie ORDER BY nazwisko FROM autorzy; est une erreur de syntaxe. Indique d'abord le rayon, ensuite seulement range ses parchemins.
  • La direction avant le champ. ORDER BY DESC nazwisko ne s'exécutera pas non plus. La direction se place toujours après le nom du champ : ORDER BY nazwisko DESC.

Souviens-toi aussi de ce qu'ORDER BY ne fait pas. Les parchemins ne changent pas de place sur les étagères - le rayon reste tel qu'il était. Seule la réponse est triée, et seulement le temps de cette requête.

Mon conseil : quand l'ordre compte, ajoute toujours ORDER BY, même si le résultat sort bien « de toute façon ». Que les parchemins soient en ordre aujourd'hui ne veut pas dire qu'ils le seront demain. Tu peux omettre ASC, mais dans les rapports je l'écris par souci de clarté.

ORDER BY est la main du scribe qui range les parchemins éparpillés sur le rayon. Dans la prochaine leçon, tu apprendras à trier selon plusieurs champs à la fois.

Tu as repéré une erreur dans cette leçon ?

Teste tes connaissances

Réponds aux questions de cette leçon. Choisis une réponse pour voir tout de suite si elle est correcte.

  1. 1. Que signifie le mot DESC dans la clause ORDER BY ?

  2. 2. Quel est le sens de tri par défaut quand on ne précise ni ASC ni DESC dans ORDER BY ?

Tâches pratiques dans le jeu

  • Tri vertical

    Ordonne les clauses d'une requête de tri dans le bon ordre où on les écrit en MySQL (de haut en bas) :

  • Éditeur de code

    Écris une requête qui récupère les colonnes tytul et rok_wydania de la table ksiazki et trie le résultat par ordre décroissant d'année de publication (les plus récents en premier).

  • Clique dans l'ordre

    Clique sur les éléments dans l'ordre où tu écrirais une clause triant les livres par prix croissant :

  • Éditeur de code

    Écris une requête qui récupère tytul et cena de la table ksiazki et trie le résultat par ordre croissant de prix (les moins chers en premier).