COMMANDER PAR dans MySQLRequête ASC et DESC avec exemple
⚡ Résumé intelligent
COMMANDER PAR dans MySQL Cette fonction trie les résultats de requêtes par ordre croissant ou décroissant grâce aux mots-clés ASC et DESC. Les sections suivantes expliquent la syntaxe, le tri sur une ou plusieurs colonnes, le placement des valeurs NULL et proposent des exemples d'exécution sur la base de données exemple myflixdb.

Qu'est-ce que ORDER BY dans MySQL?
MySQL COMMANDÉ PAR est une clause utilisée avec la requête SELECT pour trier les données de manière ordonnée. MySQL La clause ORDER BY trie les résultats de la requête par ordre croissant ou décroissant, sur une seule colonne ou sur plusieurs colonnes simultanément.
Lorsque la commande SELECT est utilisée seule, les lignes sont renvoyées dans l'ordre de lecture par le moteur de stockage, un ordre qui n'est pas garanti. Le tri consiste simplement à réorganiser ces lignes selon une séquence spécifiée. Il est possible d'effectuer un tri sur des données numériques, de type chaîne de caractères ou de type date.
MySQL Syntaxe ORDER BY
Avant d'examiner des exemples, il est utile de voir où se situe la clause dans une instruction SELECT complète.
SELECT statement... [WHERE condition | GROUP BY `field_name(s)` HAVING condition] ORDER BY `field_name(s)` [ASC | DESC];
ICI. (en anglais seulement)
- "Instruction SELECT... " est la requête SELECT classique.
- "| " représente des alternatives.
- « [WHERE condition | GROUP BY `field_name(s)` HAVING condition] » est la condition facultative utilisée pour filtrer l'ensemble des résultats de la requête.
- "COMMANDÉ PAR" effectue le tri des résultats de la requête.
- « [ASC | DESC]” est le mot-clé utilisé pour trier l'ensemble de résultats par ordre croissant ou décroissant. Notez que ASC est la valeur par défaut.
Que sont les mots-clés DESC et ASC ?
ASC et DESC sont les deux sens de tri acceptés par la clause ORDER BY. Le tableau ci-dessous les compare pour les types de données les plus fréquemment utilisés.
ASC est la forme abrégée pour ascendant |
MySQL DESC est la forme abrégée pour descendre |
|---|---|
| Il est utilisé pour trier les résultats de la requête dans un style de haut en bas. | Il sert à trier les résultats de la requête de bas en haut. |
| Lorsque vous travaillez sur des types de données date, la date la plus ancienne est affichée en haut de la liste. | Lors de la manipulation de données de type date, la date la plus récente apparaît en haut de la liste. |
| Lorsque vous travaillez avec des types de données numériques, les valeurs les plus basses sont affichées en haut de la liste. | Lors du traitement de données numériques, les valeurs les plus élevées apparaissent en haut des résultats de la requête. |
| Lorsque vous travaillez avec des types de données chaîne, le jeu de résultats de la requête est trié de ceux commençant par la lettre A jusqu'à la lettre Z. | Lorsque vous travaillez avec des types de données chaîne, le jeu de résultats de la requête est trié de ceux commençant par la lettre Z jusqu'à la lettre A. |
Les mots clés SQL DESC et ASC sont tous deux utilisés conjointement avec l'instruction SELECT et MySQL Clause ORDER BY.
Syntaxe DESC et ASC
Le mot clé de tri SQL DESC a la syntaxe de base suivante.
SELECT {fieldName(s) | *} FROM tableName(s) [WHERE condition] ORDER BY fieldname(s) ASC | DESC [LIMIT N];
ICI. (en anglais seulement)
- SELECT {Nom(s) de champ | *} FROM nom(s) de table est l'instruction contenant les champs et les tables à partir desquels obtenir l'ensemble de résultats.
- [OÙ condition] est facultatif mais peut être utilisé pour filtrer les données en fonction de la condition donnée.
- TRIER PAR nom(s) de champ(s) est obligatoire et indique le champ sur lequel le tri est effectué. MySQL Le mot-clé DESC spécifie que le tri s'effectue par ordre décroissant.
- [LIMITE N] est facultatif, mais peut être utilisé pour limiter le nombre de lignes renvoyées par le jeu de résultats de la requête.
Pourquoi utiliser DESC et ASC dans MySQL?
Connaître la syntaxe ne représente que la moitié du travail. La clause ORDER BY existe car un ensemble de résultats facile à générer pour une base de données n'est pas toujours facile à lire pour un humain.
Supposons que vous imprimiez l'historique des paiements d'un membre d'une vidéothèque afin que l'accueil puisse répondre rapidement à ses questions. Il est bien plus logique d'imprimer les paiements par ordre chronologique décroissant, du plus récent au plus ancien. Le mot-clé DESC en SQL s'avère très pratique dans ce cas, car il permet de trier la liste par date de paiement.
Supposons maintenant que le service marketing souhaite une liste de films par catégorie, afin que les abonnés puissent consulter le catalogue de la bibliothèque avant de les louer. Trier les noms de catégories et les titres de films par ordre croissant permet aux abonnés de trouver rapidement l'information, comme dans un index. Le mot-clé ASC remplit cette fonction.
En résumé, la clause ORDER BY transforme un ensemble de résultats bruts en un rapport. Le mot-clé choisi dépend de la question posée par le lecteur : Que s'est-il passé récemment ? appels à DESC, tandis que Où puis-je trouver cet article ? appels à l'ASC.
MySQL TRIER PAR Exemple
Tous les exemples suivants sont exécutés sur la base de données exemple myflixdb. Commencez par la table des membres non triée, renvoyée dans son ordre par défaut.
SELECT * FROM members;
Exécuter le script ci-dessus dans MySQL L'exécution de Workbench sur la base de données myflixdb nous donne les résultats suivants, présentés ci-dessous.
| numéro de membre | noms complets | le sexe | date_de_naissance | adresse physique | adresse postale | numéro_de_contact | en nous envoyant un mail |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | femme | 21-07-1980 | Terrain de la première rue n° 4 | Sac privé | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | femme | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 3 | Robert Phil | Masculin | 12-07-1989 | 3e rue 34 | NULL | 12345 | rm@tstreet.com |
| 4 | Gloria Williams | femme | 14-02-1984 | 2e rue 23 | NULL | NULL | NULL |
| 5 | Léonard Hofstadter | Masculin | NULL | Crête des bois | NULL | 845738767 | NULL |
| 6 | Sheldon Cooper | Masculin | NULL | Crête des bois | NULL | 976736763 | NULL |
| 7 | Rajesh Koothrappali | Masculin | NULL | Crête des bois | NULL | 938867763 | NULL |
| 8 | Leslie Winkel | Masculin | 14-02-1984 | Crête des bois | NULL | 987636553 | NULL |
| 9 | Howard Wolowitz | Masculin | 24-08-1981 | Parc du Sud | Tel: 4563 | 987786553 | NULL |
Tri par ordre décroissant avec DESC
Supposons que le service marketing souhaite classer les informations des membres par ordre décroissant de date de naissance. Cela permet à l'équipe d'envoyer les vœux d'anniversaire en temps voulu. La liste est générée par la requête ci-dessous.
SELECT * FROM members ORDER BY date_of_birth DESC;
Exécuter le script ci-dessus dans MySQL L'exécution de Workbench sur la base de données myflixdb nous donne les résultats suivants, présentés ci-dessous.
Tri par ordre croissant avec ASC
La même requête, en ordre croissant, inverse simplement le mot-clé.
SELECT * FROM members ORDER BY date_of_birth ASC;
À noter: NULL signifie « aucune valeur », ce qui est différent de zéro ou d'une chaîne vide. Observez sur les deux captures d'écran comment les dates NULL sont regroupées : MySQL La valeur NULL est considérée comme inférieure à toute autre valeur ; les lignes contenant des valeurs NULL apparaissent donc en premier sous l’ordre croissant (ASC) et en dernier sous l’ordre décroissant (DESC).
Comment trier selon plusieurs colonnes dans MySQL
Le tri sur une seule colonne répond aux questions simples. Les rapports nécessitent généralement un second niveau de tri, et la clause ORDER BY accepte une liste de champs séparés par des virgules précisément à cette fin.
Considérons le script de tri SQL suivant qui liste tous les enregistrements de membres sans aucune indication explicite.
SELECT * FROM `members`;
L'exécution du script ci-dessus donne les résultats suivants présentés ci-dessous.
| numéro de membre | noms complets | le sexe | date_de_naissance | adresse physique | adresse postale | numéro_de_contact | en nous envoyant un mail |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | femme | 21-07-1980 | Terrain de la première rue n° 4 | Sac privé | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | femme | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 3 | Robert Phil | Masculin | 12-07-1989 | 3e rue 34 | NULL | 12345 | rm@tstreet.com |
| 4 | Gloria Williams | femme | 14-02-1984 | 2e rue 23 | NULL | NULL | NULL |
| 5 | Léonard Hofstadter | Masculin | NULL | Crête des bois | NULL | 845738767 | NULL |
| 6 | Sheldon Cooper | Masculin | NULL | Crête des bois | NULL | 976736763 | NULL |
| 7 | Rajesh Koothrappali | Masculin | NULL | Crête des bois | NULL | 938867763 | NULL |
| 8 | Leslie Winkel | Masculin | 14-02-1984 | Crête des bois | NULL | 987636553 | NULL |
| 9 | Howard Wolowitz | Masculin | 24-08-1981 | Parc du Sud | Tel: 4563 | 987786553 | NULL |
Trier une seule colonne par ordre par défaut
Supposons que nous souhaitions obtenir une liste triant les résultats de la requête selon le champ « genre ». Le script ci-dessous réalise cette opération sans spécifier de direction.
SELECT * FROM `members` ORDER BY `gender`;
| numéro de membre | noms complets | le sexe | date_de_naissance | adresse physique | adresse postale | numéro_de_contact | en nous envoyant un mail |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | femme | 21-07-1980 | Terrain de la première rue n° 4 | Sac privé | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | femme | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 4 | Gloria Williams | femme | 14-02-1984 | 2e rue 23 | NULL | NULL | NULL |
| 3 | Robert Phil | Masculin | 12-07-1989 | 3e rue 34 | NULL | 12345 | rm@tstreet.com |
| 5 | Léonard Hofstadter | Masculin | NULL | Crête des bois | NULL | 845738767 | NULL |
| 6 | Sheldon Cooper | Masculin | NULL | Crête des bois | NULL | 976736763 | NULL |
| 7 | Rajesh Koothrappali | Masculin | NULL | Crête des bois | NULL | 938867763 | NULL |
| 8 | Leslie Winkel | Masculin | 14-02-1984 | Crête des bois | NULL | 987636553 | NULL |
| 9 | Howard Wolowitz | Masculin | 24-08-1981 | Parc du Sud | Tel: 4563 | 987786553 | NULL |
Les membres « Femmes » sont affichés en premier, suivis des membres « Hommes ». Cela s'explique par le fait que lorsque la clause ORDER BY est utilisée sans spécifier l'ordre ASC ou MySQL Mot-clé DESC, MySQL Trie par défaut les résultats de la requête par ordre croissant.
Trier deux colonnes dans des directions opposées
Examinons maintenant un exemple qui réalise le tri sur deux colonnesLa première colonne est trié in ordre croissant par défaut, tandis que la deuxième colonne est trié in Ordre décroissant.
SELECT * FROM `members` ORDER BY `gender`, `date_of_birth` DESC;
Exécuter le script ci-dessus dans MySQL L'analyse de Workbench sur la base de données myflixdb donne les résultats suivants.
La colonne « Sexe » était triée par défaut par ordre croissant, tandis que la colonne « Date de naissance » était triée explicitement par ordre décroissant. Chaque mot-clé de direction s'applique uniquement à la colonne qu'il suit.
Comment combiner ORDER BY avec WHERE, LIMIT et GROUP BY
ORDER BY est rarement la seule clause d'une requête de production. MySQL Les clauses sont toujours évaluées dans un ordre fixe, et la connaissance de cet ordre explique pourquoi les résultats se présentent ainsi.
- De lit les lignes du tableau.
- OÙ rejette les lignes qui ne respectent pas la condition.
- PAR GROUPE regroupe les lignes restantes et filtre ces groupes.
- COMMANDÉ PAR séquence les lignes restantes.
- LIMIT extrait le nombre de lignes demandé de la liste triée.
Étant donné que ORDER BY s'exécute après WHERE et GROUP BY mais avant LIMIT, une requête telle que « les cinq plus jeunes membres de Woodcrest » est exprimée en une seule instruction.
SELECT full_names, date_of_birth FROM members WHERE physical_address = 'Woodcrest' ORDER BY date_of_birth DESC LIMIT 5;
Le même ordre s'applique aux résultats groupés. Valeurs agrégées produites par fonctions d'agrégation Des données comme le nombre d'éléments peuvent être triées, de sorte que la catégorie la plus active apparaisse en haut du rapport.
SELECT gender, COUNT(*) AS members_count FROM members GROUP BY gender ORDER BY members_count DESC;
Astuce: La clause ORDER BY permet de trier par alias de colonne, par expression, ou même par position de colonne (par exemple, ORDER BY 3). Le tri par position est fragile, car l'ajout d'une nouvelle colonne à la clause SELECT modifie silencieusement la clé de tri. Il est donc préférable de nommer la colonne.
Il convient de retenir un point de performance : lorsque la colonne triée comporte un index, MySQL On peut lire les lignes dans l'ordre de l'index et éviter complètement le tri. Sans index, les grandes tables imposent un tri de fichiers en mémoire ou sur disque, ce qui explique généralement la lenteur des requêtes de rapport.

ASC est la forme abrégée pour ascendant
MySQL DESC est la forme abrégée pour descendre

