HOWTO · MySQL
按字母顺序对 MySQL 数据进行排序
本教程演示如何按字母顺序对 MySQL 服务器中的数据进行排序。
本页内容
若要按名称从 A 到 Z 检索 MySQL 行,请在 SELECT 查询中添加 ORDER BY,后面接文本列名。默认按升序排列;添加 DESC 可将顺序反转为从 Z 到 A。以下示例使用 student_details 表及其 stu_firstName 列。
在 MySQL 中创建表
示例表包含 ID、名字和姓氏。运行 CREATE TABLE student_details (stu_id INT, stu_firstName VARCHAR(255) DEFAULT NULL, stu_lastName VARCHAR(255) DEFAULT NULL, PRIMARY KEY (stu_id)); 来创建表。然后运行 INSERT INTO student_details (stu_id, stu_firstName, stu_lastName) VALUES (1, 'Preet', 'Sanghavi'), (2, 'Rich', 'John'), (3, 'Veron', 'Brow'), (4, 'Geo', 'Jos'), (5, 'Hash', 'Shah'), (6, 'Sachin', 'Parker'), (7, 'David', 'Miller'); 插入示例记录。主键为每位学生的记录分配不同的 ID;排序示例会使用这些姓名值。这里的 SQL 语句是查询示例;实际结果取决于是否在 MySQL 数据库中运行它们。
运行 SELECT * FROM student_details; 查看插入的行。此查询没有指定排序方式,因此数据库返回的行可能并非按字母顺序排列。不要把插入顺序当作排序保证;请在每个查询中明确指定所需顺序。
在 MySQL 数据库中按字母顺序排序
用于排序的子句是 ORDER BY;单独使用 ORDER 并不足够。其通用形式为 SELECT columns FROM table_name ORDER BY column_name;。在此示例中,使用 SELECT stu_firstName FROM student_details ORDER BY stu_firstName; 只查询名字。由于默认按升序排列,姓名会按字母从 A 到 Z 排列。结果中的姓名顺序为 David、Geo、Hash、Preet、Rich、Sachin、Veron。
你也可以明确写出 ASC,以说明排序方向:SELECT stu_firstName FROM student_details ORDER BY stu_firstName ASC;。它与省略方向时一样,按升序排列。ASC 和 DESC 是方向关键字,写在 ORDER BY 子句中的列名后面。
要反转顺序,请在末尾添加 DESC:SELECT stu_firstName FROM student_details ORDER BY stu_firstName DESC;。结果为 Veron、Sachin、Rich、Preet、Hash、Geo、David。这是降序排列,顺序从 Z 向 A。排序方向只影响查询返回的行顺序,不会改变已存储的值,也不会重新排列表本身。由于示例只查询 stu_firstName,结果中只有姓名这一列。如果希望排序结果显示更多信息,可以在 SELECT 列表中添加 stu_id 或 stu_lastName;排序仍由 ORDER BY 后指定的列决定。
要将查询用于自己的数据,请把 student_details 替换为你的表名,并把 stu_firstName 替换为要排序的文本列名。即使查询其他列,也要在 ORDER BY 子句中保留排序列,例如 SELECT stu_firstName, stu_lastName FROM student_details ORDER BY stu_firstName;。使用默认方向或 ASC 可按 A 到 Z 排序,使用 DESC 则反向排列。文本值的实际顺序取决于该列的 MySQL 排序规则(collation);这个基础示例展示的是给定的英文姓名,并未规定适用于各种语言的排序规则。
如果查询还要筛选行,请将 ORDER BY 放在 WHERE 之后;如果要限制返回的行数,请将 LIMIT 放在排序子句之后。例如,查询结构如下:SELECT columns FROM table_name WHERE condition ORDER BY column_name DESC LIMIT row_count;。MySQL 会先筛选行,再对符合条件的行排序,最后返回最多指定数量的行。排序列必须可供查询使用,而排序方向要写在该列名后面。