对查询结果进行排序是日常应用开发中最为常见的需求,在SQL中通过order by实现。order by是select语句中一部分,即子句。
其实,检索出的数据并不是随机显示的。如果不排序,数据一般将以它在底层表中出现的顺序显示,这有可能是数据最初添加到表中的顺序。但是,如果数据随后进行过更新或删除,那么这个顺序将会受到DBMS重用回收存储空间的方式的影响。
子句(clause)
SQL语句由子句构成,有些子句是必需的,有些则是可选的。一个子句通常由一个关键字加上所提供的数据组成。子句的例子有我们在前一
课看到的SELECT语句的FROM子句。
为了明确地排序用SELECT语句检索出的数据,可使用ORDER BY子句。ORDER BY子句取一个或多个列的名字,据此对输出进行排序。
从以上可以看出:
注意点
ORDER BY子句的位置:
在指定一条ORDER BY子句时,应该保证它是SELECT语句中最后一条子句。如果它不是最后的子句,将会出现错误消息
通过非选择列进行排序:
通常,ORDER BY子句中使用的列将是为显示而选择的列。但是,实际上并不一定要这样,用非检索的列排序数据是完全合法的
order by不仅可以作用在单列上进行排序,还可以实现对多列排序。要按多个列排序,简单指定列名,列名之间用逗号分开即可(就像选择多个列时那样)。
排序的优先级:按照order by后面紧随的列依次递减。
数据排序不限于升序排序(从A到Z),这只是默认的排序顺序。还可以使用ORDER BY子句进行降序(从Z到A)排序。为了进行降序排序,必须
指定DESC关键字。默认是升序。
如果不排序的查询,如:
select * from student;
结果如:
name
age
lxy
20
son
1
wly
18
如果进行排序:
select * from student order by age;
结果如:
name
age
son
1
wly
18
lxy
20
根据age进行了从大到小的排序,即升序排序。
再来看下排序不检索的列:
select name from student order by age;
结果如:
name
son
wly
lxy
检索出的结果和上面的顺序保持一样。
select * from student;
结果如下:
name
age
lxy
20
lxy
10
lxy
25
son
1
wly
18
wly
16
如果按照name,age进行排序:
select * from student order by name, age;
结果如下:
name
age
lxy
10
lxy
20
lxy
25
son
1
wly
16
wly
18
从以上的两个结果中可以看出优先级。先对结果按照name排序,然后再对相同name的结果,按照age排序。
select * from student order by name;
select * from student order by name asc;
以上两条查询结果一致:
name
age
lxy
20
lxy
10
lxy
25
son
1
wly
18
wly
16
如果按照降序排序:
select * from student order by name desc;
结果如下:
name
age
wly
18
wly
16
son
1
lxy
20
lxy
10
lxy
25
《SQL必知必会》
手机扫一扫
移动阅读更方便
你可能感兴趣的文章