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 --
【NULLS】Oracle对SQL排序后NULL值位置的“特殊关照”
分享好友
分享这个小栈给你的朋友们,一起进步吧。
订阅须知
• 所有用户可根据关注领域订阅专区或所有专区
• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询
• 专区发布评论属默认订阅所评论专区(除付费小栈外)