1 MYSQL
默认情况下 null 算作最小值
要手动指定null的顺序,可以使用:
1.将null强制放在最前:
if(isnull(字段名),0,1) asc //asc可以省略
2.将null强制放在最后
if(isnull(字段名),0,1) dsc
if(isnull(字段名),1,0) asc //asc可以省略
对于这种使用方式的理解:
以if(isnull(字段名),0,1)为例,它的意思是将该字段根据是否为null值分成两部分,值为null行相当于得到了一个隐含的排序属性0,值为非null的行相当于得到了一个隐含的排序属性1,在排序的时候,先根据这一隐含属性进行升序排列,因为if(isnull(字段名),0,1)相当于if(isnull(字段名),0,1) asc省略了asc而已,所以自然地,排序字段为null的那些行(隐含排序属性)会在最前。
对于将null强制放在最后的语句的理解以此类推。
例子
select * from test order by if(isnull(num),0,1),num asc/desc
不管后面的num字段是升序还是降序,null值都被强制指定在最前。
select * from test order by if(isnull(num),1,0),num asc/desc
不管后面的num字段是升序还是降序,null值都被强制指定在最后。
2 oracle
默认情况下 null 算作最大值
要手动指定null的顺序(主要使用降序的时候),可以使用:
1 nulls first
表示null值的记录将排在最前面
select * from test order by num asc nulls first
2 nulls last
表示null值的记录将排在最后面
select * from test order by num desc nulls last