orderby null排在最后(sql排除为空并且排序的命令)

本文目录
- sql排除为空并且排序的命令
- 为什么SQL语句的结尾要加上ORDER BY NULL
- oracle使用order by排序null值如何处理
- ThinkPHP order by 两个条件
- oracle使用orderby排序null值如何处理
- order by sql排序问题
sql排除为空并且排序的命令
|desc]进行排序,nulls last 时,强制null放在最后,不为null的按声明顺序进行排序
order by colum asc 时,null默认被放在最前,order by colum desc 时,null默认被放在最后,
ORDER BY IF(ISNULL(update_date),0,1) null被强制放在最前,不为null的按声明顺序进行排序
ORDER BY IF(ISNULL(update_date),1,0) null被强制放在最后,不为null的按声明顺序进行排序
为什么SQL语句的结尾要加上ORDER BY NULL
有时候我们会看到项目中有些SQL语句带有 ORDER BY NULL ,这时我们看的有点疑惑了。难道 ORDER BY NULL 是按null进行排序的意思么?关键是表中字段都是设置NOT NULL,那还怎么按照null排序?
我们在学习索引优化时知道, ORDER BY 后面字段建立索引,可利用索引有序性而不用对字段进行额外排序操作,以提升语句执行效率 。而null不是索引字段,也没代表什么实际的含义,那么在SQL语句带有 ORDER BY NULL 究竟有什么用?下面一起来一探究竟。
查看MySQL官方文档可以看到,官方对使用 ORDER BY NULL 给出的解析。大致意思是,在SQL语句中会隐含对 GROUP BY 列进行排序,如果在 GROUP BY 列后面加上 ORDER BY NULL 会去掉这个隐含排序,以提升语句查询的速度。
***隐藏网址***
纸上得来终觉浅,绝知此事要躬行。下面我们利用EXPLAIN,来复现一下这个场景:
GROUP BY
GROUP BY + ORDER BY NULL
我们可以看到加上 ORDER BY NULL 之后可以看到Extra里面少了 Using filesort 。
Using filesort 表示对查询结果进行排序的意思。如果我们查询的结果集是非常大的,排序操作也将消耗较多的性能,如果去掉Using filesort,减少排序的步骤,将会对查询的效率有极大的提升。小小的改进,收益却是巨大的。
同时,在 stackoverflow 中发现有人说MySQL 8.0之后版本使用 ORDER BY NULL 将没有任何的查询性能上收益了。
原因是8.0版本之后, GROUP BY 的隐含排序已经去掉了,在 GROUP BY 后面使用 ORDER BY NULL 也不会出现5.7版本之前压制字段隐含排序的现象,所以也没有必要在SQL语句中加上 ORDER BY NULL 。在MySQL官方文档中也有相同的叙述,由于本人使用的是MySQL版本是5.7,感兴趣的小伙伴可以在8.0上复现一下这个场景。
***隐藏网址***
如果使用8.0之前版本,在没有明确声明 ORDER BY 列时,可以在 GROUP BY 后加上 ORDER BY NULL 来提升查询的效率。
如果使用8.0之后版本, GROUP BY 后无需加 ORDER BY NULL ,但需留意结果集是未排序的。 GROUP BY 后无需加 ORDER BY NULL ,但需留意结果集是未排序的。
oracle使用order by排序null值如何处理
适用情况:oracle 对查询结果进行排序时,被排序的栏位存在null值,且要指定NULL值排在最前面或者最后面,
在order by 的时候,用Nvl、NVL2 、Decode、case .....when....end;等函数对栏位的null值进行处理。
排序要看用什么字段排序,可以单个字段,也可以多个字段,这些与存在值是否为null无关。
如下列数据
id name class
1 a 1
2 b null
3 c null
现在要按id和class排序,其中id为主要排序字段,class为次要排序字段
可写如下语句
select * from 表名 order by id,class。
ThinkPHP order by 两个条件
order by可以按一个或多个(最多16个)字段排序查询结果,可以是升序(ASC)也可以是降序(DESC),如果缺省,则是升序。order by中如果定义了多个字段,则按照字段的先后顺序排序。
比如: order by * desc, * acs ;
*为条件,条件的优先级和条件的先后顺序一致,order by通常放在SQL语句的最后。
扩展资料:
order by排序的用法:
1,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)
2,多列排序
单列升序: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。
oracle使用orderby排序null值如何处理
oracle 对查询结果进行排序时,被排序的栏位存在null值,且要指定NULL值排在最前面或者最后面,本文将介绍如何处理oracle 空值排序,需要的朋友可以参考下
适用情况:
oracle 对查询结果进行排序时,被排序的栏位存在null值,且要指定NULL值排在最前面或者最后面
关键字:Nulls First;Nulls Last
默认情况:null 默认为最大值(即:asc 升序大》,null值排在最后;desc 降序小》,null值排在最前面)
指定:
1.Oracle Order by支持的语法
2.指定Nulls first 则表示null值的记录将排在最前(不管是asc 还是desc)
3.指定Nulls last 则表示null值的记录将排在最后(不管是asc 还是desc)
语法举例:(Table:Tab_A 有部分空值的栏位Col_A)
select * from Tab_A order by Tab_A. Col_A (asc/desc) nulls first------》null 值排在最前面
select * from Tab_A order by Tab_A. Col_A (asc/desc) nulls last ------》null 值排在最后面
其他方法:
在order by 的时候,用Nvl、NVL2 、Decode、case .....when....end;等函数对栏位的null值进行处理
例如:select * from Tab_A order by NVL(Tab_A. Col_A,’abc’ ) (asc/desc);
order by sql排序问题
因为你的s_score
是
varchar的,排序是按varchar的顺序排
如
100
和
2
100的第一位是1
比
2
小,所以在2前面,你可以在order
by里转换成number进行排序

更多文章:
ajax提交form表单数据到servlet(HTML与Servlet的连接)
2025年12月7日 10:30
批量转换ascii(如何把txt 批量从utf8转换为ascii,最好有工具)
2025年11月18日 04:30
postgresql 创建用户(postgresql如何用新创建的用户登录呢)
2026年1月28日 16:30
工程师一个月能赚多少钱(造价工程师一般月收入是多少 需求量大吗)
2026年7月4日 11:00
delphi led扩展屏显示开发(用DELPHI模拟LED屏下的那种文字特效怎么做)
2025年12月17日 14:30
download是什么意思可以删除吗(Download什么意思,Download的文件夹能删了吗,)
2026年7月27日 03:15
trousers后面单复数(The+trousers用不用三单)
2026年5月7日 03:00
linux是自由软件吗(Linux是自由软件,什么是自由软件,它包含哪些含义)
2026年4月14日 08:15
springmvc答辩问题(我的毕业设计是JSP+mysql+Tomcat搭建的一个管理系统,答辩老师问我是怎么设计的,我应该)
2025年11月16日 05:00















