Cours SQL et MySQL · Module 2: Interroger les données (SELECT)
ORDER BY - ranger les parchemins
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 :
| tytul | rok_wydania |
|---|---|
| Antygona | 1985 |
| Medea | 1985 |
| Ajaks | 1985 |
| Iliada | 1990 |
| Odyseja | 1990 |
| … | … |
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 :
| tytul | rok_wydania |
|---|---|
| Tom Sawyer | 2020 |
| Hamlet | 2020 |
| Pan Tadeusz | 2015 |
| Dziady | 2015 |
| Etyka | 2012 |
| … | … |
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 :
| tytul | cena |
|---|---|
| Ajaks | 18.50 |
| Antygona | 19.90 |
| Medea | 21.00 |
| Dziady | 24.50 |
| Hamlet | 27.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 :
| imie | nazwisko |
|---|---|
| Arystoteles | Arystoteles |
| Euklides | Euklides |
| Homer | Homer |
| Adam | Mickiewicz |
| Platon | Platon |
| Henryk | Sienkiewicz |
| Sofokles | Sofokles |
| Mark | Twain |
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 nazwiskone 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. Que signifie le mot DESC dans la clause ORDER BY ?
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).