绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
【NULLS】Oracle对SQL排序后NULL值位置的“特殊关照”
2020-01-19 16:12:55
Oralce对NULL值的排序后的位置有一个特殊的“关照”,这就是“NULLS FIRST”和“NULLS LAST”选项,使用这个选项便可以在SQL排序中强制指定NULL值出现的位置(是显示在前,还是显示在后)。
演示并总结在此,供参考。

1.创建演示表T并初始化7条数据
sec@ora10g> create table t (x int);
sec@ora10g> insert into t values (1);
sec@ora10g> insert into t values (2);
sec@ora10g> insert into t values (3);
sec@ora10g> insert into t values (4);
sec@ora10g> insert into t values (null);
sec@ora10g> insert into t values (null);
sec@ora10g> insert into t values (null);
sec@ora10g> commit;

2.不加“关照”的order by升序排序效果--NULL值在后。
sec@ora10g> select * from t order by x;

         X
----------
         1
         2
         3
         4




7 rows selected.

3.不加“关照”的order by降序排序效果--NULL值在前。
sec@ora10g> select * from t order by x desc;

         X
----------



         4
         3
         2
         1

7 rows selected.

4.特殊“关照”的order by升序排序效果--NULL值在前。
sec@ora10g> select * from t order by x nulls first;

         X
----------



         1
         2
         3
         4

7 rows selected.

5.特殊“关照”的order by降序排序效果--NULL值在后。
sec@ora10g> select * from t order by x desc nulls last;

         X
----------
         4
         3
         2
         1




7 rows selected.

6.规律总结
1)不加“关照”的情况下,我们可以把那些NULL值假想为所有内容中值是大的,因此,升序排序后NULL值在后,倒序排序后NULL值在前!
2)特殊“关照”的情况下,当指定“NULLS FIRST”时,无论是升序排序还是倒序排序,NULL值都会排列在前面;当指定“NULLS LAST”时,无论是升序排序还是倒序排序,NULL值都会排列在后面。

7.Oracle官方文档中有关“NULLS FIRST | NULLS LAST”的参考内容
http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_10002.htm#i2171079
摘录在此:
NULLS FIRST | NULLS LAST
Specify whether returned rows containing null values should appear first or last in the ordering sequence.
NULLS LAST is the default for ascending order, and NULLS FIRST is the default for descending order.

8.小结
通过这篇内容的介绍,我们可以看到Oracle的确是无微不至。有了这个NULL值位置的强制方法,我们在书写SQL时的灵活性和可控性便可进一步得到加强。

Good luck.

secooler
10.01.30

-- The End --

分享好友

分享这个小栈给你的朋友们,一起进步吧。

OCM联盟
创建时间:2019-12-27 14:04:54
OCM联盟(OCMU – Oracle Certified Master Union)是一群有着共同理想,共同志向的DBA的家。 ⚠️该小栈仅限ocm成员入驻!审核制! Oracle Certified Master (OCM) -Oracle认证大师,是Oracle认证的别,是对数据库从业人员的技术、知识和操作技能的别的认可。Oracle OCM是解决困难的技术难题和复杂的系统故障的佳Oracle专家人选,也是IT行业衡量IT专家和经理人的高专业程度及经验的基准。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • 侯圣文@secooler
    栈主

小栈成员

查看更多
  • gaokeke123
  • ?
  • 山中老狐狸
  • 飘絮絮絮丶
戳我,来吐槽~