一、order by 1
其实1表示第一个栏位,2表示第二栏位; 依此类推,当表中只有2个栏位时,oder by 3就会出错,这个跟order by 列名没有什么区别,不过在特殊情况下还是很有用的.
-
select owner,table_name,tablespace_name,blocks,last_analyzed
-
from all_tables order by 1,2;
根据第一列和第二列排序
相当于
order by owner,table_name
二、ORDER BY 中关于NULL的处理
缺省处理,Oracle在Order by 时认为null是最大值,所以如果是ASC升序则排在最后,DESC降序则排在最前。
你也可以使用nulls first 或者nulls last 语法来控制NULL的位置。
如果Order by 中指定了表达式Nulls first则表示null值的记录将排在最前(不管是asc 还是 desc)
如果Order by 中指定了表达式Nulls last则表示null值的记录将排在最后 (不管是asc 还是 desc)
-
select * from zl_cbqc order by cb_ld nulls first
-
select * from zl_cbqc order by cb_ld desc nulls last
三、多列排序
单列升序:select<column_name> from <table_name> order by <column_name>; (默认升序,即使不写ASC)
单列降序:select <column_name> from <table_name> order by <column_name> desc;
多列升序:select <column_one>, <column_two> from <table_name> order by <column_one>, <column_two>;
多列降序:select <column_one>, <column_two> from <table_name> order by <column_one> desc, <column_two> desc;
多列混合排序:select <column_one>, <column_two> from <table_name> order by <column_one> desc, <column_two> asc;
多列规则的排序的时候,如果第一列相同的情况下,会根据第二列继续排序
四、指定第一位
select * from tb order by decode(blogid,3,1,2), blogid;
通过decode()函数,BLOGID值为3的那条记录被转换为了1,而其他的记录都是2。
默认升序排序,blogid = 3时返回1,其他则返回2, 所以blogid = 3的记录排在最前,所以不管怎样,BLOGID为3的值必须排在第一位,其他的记录按照BLOGID升序排序。