4.4.2 对多列进行排序
http://book.51cto.com 2008-06-04 16:14 马军/李玉林等编著 电子工业出版社 我要评论(0)

* 摘要:《SQL语言与数据库操作技术大全:基于SQL Server实现》第4章主要讲的是基本的查询,所谓查询就是让数据库服务器根据客户端的要求搜寻出用户所需要的信息资料,并按用户规定的格式进行整理后返回给客户端。本节为您介绍对多列进行排序。
* 标签:SQL语言 数据库 ORDER BY SQL Server SQL语言与数据库操作技术大全
*
Oracle帮您准确洞察各个物流环节

4.4.2 对多列进行排序

使用ORDER BY子句也可以根据两列或多列的结果进行排序,只要用逗号分隔开不同的排序关键字就可以了。如下面的语句:

ORDER BY col1 DESC,col2,……,colm



其实际排序结果是根据ORDER BY子句后面列名的顺序确定优先级的。即查询结果首先以列col1的降序顺序进行排序,而只有当列col1出现相同的信息时,这些相同的信息再按col2列的升序进行排序,依此类推。

实例33 对多列进行排序操作

本实例实现在BookInfo表中,查询所有的图书信息,结果按照publish列的降序和pubdate列的升序顺序排序。实现代码如下:

USE Library 

SELECT * 

FROM BookInfo 

ORDER BY publish DESC,pubdate


运行该代码,得到的查询结果如图4.35所示。

图4.35 多列排序的查询结果

可见,系统根据排序的优先级,首先依据publish字段的记录进行降序排序(汉语拼音的首字母),当publish字段的记录相同时,再依据pubdate字段的记录进行升序排序。

另外,ORDER BY 子句除了可以根据列名进行排序外,还支持根据列的相对位置(即序号)进行排序。

如下面的语句:

SELECT col1,col2,……,coln 

FROM table_name 

ORDER BY 2,1



此时,ORDER BY子句后面的序号实际上就是SELECT关键词后面的列名的序号。此时ORDER BY子句就等同于ORDER BY col2,col1。
实例34 使用序号对多列进行排序操作

本实例实现在BookInfo表中,查询所有的bookid、bookname、publish、pubdate和price信息,并通过使用序号的方式对结果按照publish列的降序和pubdate列的升序顺序排序。实现代码如下:

USE Library 

SELECT bookid,bookname,publish,pubdate,price 

FROM BookInfo 

ORDER BY 3 DESC,4




运行该代码,得到的查询结果如图4.36所示。

当ORDER BY所需要的列不在SELECT语句所选的范围内时,采用列的序号显然是行不通的。当然,可以将列别与序号混合起来解决这个问题。

图4.36 使用序号进行多列排序的查询结果