MySQL中order by語句對null字段的排序


默認情況下,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強制放在最后的語句的理解以此類推。

 


 

下面在MySQL 5.6上做一個測試:

測試的表的結構如下:

create table test ( id int primary key auto_increment, num int );

 

表中已經有6條數據,分別為:

 


 

1.執行 :

select * from test order by num;

結果如下:

 


 

 

2.執行:

select * from test order by num desc;

結果如下:

 


 

第1、2步結果顯示:默認情況下null為最小。

 


 

3.執行:

select * from test order by if(isnull(num),0,1),num;

結果如下:

 


 

 

4.執行:

select * from test order by if(isnull(num),0,1),num desc;

結果如下:

 


 

第3、4步結果顯示:通過if(isnull(num),0,1),不管后面的num字段是升序還是降序,null值都被強制指定在最前。

 


 

 

5.執行:

select * from test order by if(isnull(num),1,0),num;

結果如下:

 


 

 

6.執行:

select * from test order by if(isnull(num),1,0),num desc;

結果如下:

 


 

第5、6步結果顯示:通過if(isnull(num),1,0) ,不管后面的num字段是升序還是降序,null值都被強制指定在最后。

 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM