asc是mysql中用于指定升序排列的关键字,全称为ascending,在查询语句中通常和order by子句搭配使用,用来让查询结果按照指定的字段从小到大、从旧到新等规则进行排序。比如数值类型会按从小到大排列,日期类型会按从早到晚排列,字符串类型会按字符集的排序规则从小到大排列。

asc的基本使用语法
asc需要和order by子句结合使用,基本语法格式如下:
-- 基础语法 SELECT 字段名 FROM 表名 ORDER BY 排序字段 ASC; -- 可以省略ASC,默认就是升序排列 SELECT 字段名 FROM 表名 ORDER BY 排序字段;
其中排序字段可以是表中的任意字段,只要该字段支持排序操作即可。如果不手动指定ASC或者DESC,mysql默认会使用ASC进行升序排列。
实际使用示例
假设我们有一个学生成绩表student_score,表结构如下:
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | int | 学生ID |
| name | varchar(20) | 学生姓名 |
| score | int | 考试分数 |
| exam_date | date | 考试日期 |
按分数升序排列
如果我们想要查询所有学生的成绩,并且按照分数从低到高排列,就可以使用asc关键字:
-- 按score字段升序排列,分数低的在前 SELECT id, name, score FROM student_score ORDER BY score ASC;
按考试日期升序排列
如果需要按照考试日期从早到晚排列,同样可以使用asc:
-- 按exam_date字段升序排列,日期早的在前 SELECT id, name, exam_date FROM student_score ORDER BY exam_date ASC;
多字段排序使用asc
asc也支持多字段排序,当第一个排序字段值相同时,会按照第二个字段的升序排列:
-- 先按score升序,分数相同的情况下按exam_date升序 SELECT id, name, score, exam_date FROM student_score ORDER BY score ASC, exam_date ASC;
asc和desc的区别
desc是mysql中的降序排列关键字,全称为descending,和asc的作用相反。两者的区别如下:
- asc:升序排列,数值从小到大,日期从早到晚,字符串按规则从小到大
- desc:降序排列,数值从大到小,日期从晚到早,字符串按规则从大到小
示例对比:
-- 升序,分数低的在前 SELECT name, score FROM student_score ORDER BY score ASC; -- 降序,分数高的在前 SELECT name, score FROM student_score ORDER BY score DESC;
使用asc的注意事项
使用asc的时候需要注意以下几点:
- asc只对紧跟在order by后面的字段生效,每个需要升序的字段都需要单独指定,或者省略不写默认升序
- 如果排序字段存在null值,mysql中null会被视为最小值,升序排列的时候会排在最前面
- asc关键字本身不区分大小写,写ASC、Asc、asc效果都是一样的,不过通常建议统一写成小写方便阅读
- asc不能单独使用,必须搭配order by子句,否则mysql会报错
注意:不要在order by子句之外的地方单独使用asc关键字,它只用于指定排序规则,没有其他功能。