MySQL中order by语句对null字段的排序
2017-07-14 16:40
381 查看
默认情况下,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上做一个测试:
测试的表的结构如下:
表中已经有6条数据,分别为:
1.执行 :
结果如下:
2.执行:
结果如下:
第1、2步结果显示:默认情况下null为最小。
3.执行:
结果如下:
4.执行:
结果如下:
第3、4步结果显示:通过if(isnull(num),0,1),不管后面的num字段是升序还是降序,null值都被强制指定在最前。
5.执行:
结果如下:
6.执行:
结果如下:
第5、6步结果显示:通过if(isnull(num),1,0) ,不管后面的num字段是升序还是降序,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值都被强制指定在最后。
相关文章推荐
- MySQL中order by语句对null字段的排序
- MySQL中order by语句对null字段的排序
- 转自:http://m.blog.csdn.net/article/details?id=6554168 在使用order by语句进行查询结果排序时,不同的数据库对于被排序字段数据行为null的情况
- order by 语句对null字段的默认排序
- order by 语句对null字段的默认排序
- order by 语句对null字段的默认排序
- order by 语句对null字段的默认排序
- order by 语句对null字段的默认排序
- order by 语句对null字段的默认排序
- order by 语句对null字段的默认排序
- MySQL如何利用索引优化ORDER BY排序语句
- mysql多字段排序(去null)
- mysql 中文字段排序( 按拼音首字母排序) 的查询语句
- SQL语句order by两个字段同时排序
- MySQL也有潜规则 – Select 语句不加 Order By 如何排序?
- sql语句中order by 多个字段同时排序的应用
- mysql 中文字段排序( 按拼音首字母排序) 的查询语句
- mysql5.6中 order by 多个字段排序问题
- SQL语句order by两个字段同时排序。
- MySQL如何利用索引优化ORDER BY排序语句