在数据库中,select语句返回的结果,其顺序是没有意义的。一般情况下,数据库默认在表中最后一行添加新记录,但是如果数据后来进行过更新或删除,则此顺序将会受到MySQL重用回收存储空间的影响,因此在数据库中,如果没有明确指定排序顺序,则不应该假定查询出的数据的顺序有意义。
在SQL语句中,可以使用order by子句对select语句查询出的结果按一个或多个字段进行排序。
指定多字段排序时,多个字段间用逗号隔开,会先按第一个字段的值进行排序,当第一个字段值均相同时再按第二个字段值进行排序,如果第一个字段值中没有重复数据,则不会按照第二个字段排序,其结果跟按照第一个字段进行单字段排序的结果是一样的。
同时order by子句后每个字段都可以指定排序方向,关键字asc表示升序,关键字desc表示降序,排序方向的关键词与字段名间用空格隔开。当没有指定排序方向时,默认该字段按照升序进行排序。
语法格式:
select 字段1[,字段2,…] from 表名 order by 字段1[ 排序方向,字段2 排序方向,…];
示例:
#查询所有学生考试成绩,按分数高低顺序显示
select * from sc order by score desc;
#查询所有学生考试成绩,按课程编号升序、分数降序显示
select * from sc order by c_id,score desc;