order by排序的用法

时间:2024-10-08 19:29:19

一、order by 1

其实1表示第一个栏位,2表示第二栏位; 依此类推,当表中只有2个栏位时,oder by 3就会出错,这个跟order by 列名没有什么区别,不过在特殊情况下还是很有用的.

  1. select owner,table_name,tablespace_name,blocks,last_analyzed
  2. 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)

  1. select * from zl_cbqc order by cb_ld nulls first
  2. 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升序排序。