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.

  • (I.e. Comportement par défaut : ORDER BY trie par ordre croissant lorsque ni ASC ni DESC ne sont spécifiés ; ASC est donc facultatif dans la plupart des instructions.
  • ⬆️ Mot-clé ASC : Le format ASC classe les nombres du plus petit au plus grand, les chaînes de caractères de A à Z et les dates de la plus ancienne à la plus récente.
  • ⬇️ Mot-clé DESC : DESC inverse cette séquence, ce qui convient aux historiques de paiement du plus récent au plus ancien et aux listes de dates de naissance décroissantes.
  • 🧮 Tri multi-colonnes : L'ordre des colonnes est important. La fonction ORDER BY gender, date_of_birth DESC trie d'abord le genre par ordre croissant, puis les dates par ordre décroissant au sein de chaque groupe.
  • ???? Combinaison de clauses : WHERE filtre les lignes, GROUP BY les agrège, ORDER BY séquençait le résultat et LIMIT le tronquait.
  • ⚙️ Facteur de performance : Un index sur la colonne triée permet MySQL pour éviter une opération de tri de fichiers sur les grandes tables.

COMMANDER PAR dans MySQL

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.

Mots-clés DESC et ASCASC est la forme abrégée pour ascendant Mots-clés DESC et ASCMySQL 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.

MySQL Résultat de la requête TRIER PAR DESC

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;

MySQL Résultat de la requête TRIER PAR 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.

MySQL Exemple de tri sur deux colonnes

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.

  1. De lit les lignes du tableau.
  2. rejette les lignes qui ne respectent pas la condition.
  3. PAR GROUPE regroupe les lignes restantes et filtre ces groupes.
  4. COMMANDÉ PAR séquence les lignes restantes.
  5. 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.

FAQ

C'est possible. Sans index sur la colonne triée, MySQL Effectue un tri de fichiers sur l'ensemble des résultats. L'ajout d'un index correspondant à la colonne et au sens de tri permet au serveur de lire les lignes dans l'ordre et d'ignorer cette étape.

Généralement non. Les classements par défaut, comme utf8mb4_0900_ai_ci, ne sont pas sensibles à la casse ; ainsi, « apple » et « Apple » sont triés ensemble. Un classement binaire ou _cs, ou une clause ORDER BY BINARY nom_de_colonne, produit un tri sensible à la casse, où les majuscules apparaissent en premier.

Oui. La fonction ORDER BY RAND() mélange les résultats, ce qui est pratique pour sélectionner un film ou un membre au hasard. Elle attribue un score à chaque ligne avant le tri ; il est donc conseillé de l'utiliser avec LIMIT et de l'éviter pour les très grandes tables.

Oui. Des assistants d'IA intégrés à des outils tels que MySQL Workbench Convertissez les requêtes en langage naturel en instructions SELECT avec ORDER BY. Vérifiez toujours la colonne de tri générée et le sens du tri, car une IA ne peut pas savoir quel ordre votre rapport exige.

En partie. Des conseillers basés sur l'IA analysent les journaux de requêtes lentes et suggèrent des index permettant d'éviter les opérations de tri de fichiers. Ces suggestions nécessitent toutefois une validation humaine, car chaque index supplémentaire ralentit les insertions et les mises à jour sur la même table.

Résumez cet article avec :