如何使用select语句的order by 子句,根据需要排序检索出的数据。
3.1 排序数据
如果不排序,数据一般以它在表中出现的顺序显示,有可能是数据最初添加到表中的顺序。
如果数据随后进行过更新或删除,那么这个顺序将会受到DBMS重用回收存储空间的方式影响。如果不明确控制的话,最终的结果不能(也不应该)依赖该排序顺序。
子句(clause):
通常由一个关键字加上所提供的数据组成。(前一课的select语句的from子句)
order by 子句取一个或多个列的名字,据此对输出进行排序。
指示对应的列以字母顺序排序数据。
order by子句位置:是select语句中最后一条子句
3.2 按多个列排序
例如要显示雇员名单,可能希望按姓和名排序(首先按姓排序,然后在每个姓中再按名排序)。
要按多个列排序,只须指定这些列名,列名之间用逗号分开(于选择多个列一样)。
如下,检索3个列,并按其中两个列对结果进行排序——先按价格,再按名称排序:
仅在多个行具有相同的prod_price值时,才对产品按prod_name进行排序。如果prod_price列中所有的值都是唯一的,则不会按prod_name排序。
3.3 按列位置排序
除了能用列名指出排序顺序外,order by还支持按相对列位置进行排序。
select清单中指定的是选择列的相对位置而不是列名。
好处 | 不用重新输出列名 |
缺点 | 1. 不明确给定列名有可能造成错用列名排序; 2. 在对select清单进行更改时容易错误对数据进行排序(忘记对order by子句做相应改动); 3. 进行排序的列不在select清单中,不能用这个技术。 |
!!!有必要的话,可以混合使用实际列名和相对位置
3.4 指定排序方向
默认升序排序(A到Z),为了进行降序排序,必须指定desc关键字。
最贵的排在前面。
用多个列排序,如下,以降序排序产品(最贵的在最前面),再加上产品名:
desc关键字只应用到直接位于其前面的列名。只对prod_price列指定desc,对prod_name列不指定。prod_price列以降序排序,prod_name(在每个价格内)仍然按标准的升序排序。
!!!在多个列上进行降序排序,必须每一列指定desc关键字。
desc是descending的缩写,两个关键字都可以使用。
asc(ascending):升序。
字典(dictionary)排序顺序 | A与a相同 |
DBMS中 | 大小写的规定根据管理员而定 |