甲骨文order by子句对NULL的排序

  

我们都知道在Oracle SQL语句中命令是用来排序查询出来的结果集的,而在Oracle中NULL值是一个很特殊的值,如果order by指定的列有NULL值,那排序结果又是怎样的呢。

下面做一组实验观察一下命令时甲骨文是怎么处理零的

版本11.2.0.4

1,创建测试表并插入测试数据

zx@ORCL> create  table  t  (id 数字,name  varchar2 (10));      Table 创建。      zx@ORCL> insert  into  t 值(1、zx);      1,row 创建。      zx@ORCL> insert  into  t 值(2,“王”);      1,row 创建。      zx@ORCL> insert  into  t 值(3 ' zxt ');      1,row 创建。      zx@ORCL> insert  into  t 值(空);      1,row 创建。      zx@ORCL> insert  into  t 值(5 ' yhz ');      1,row 创建。      zx@ORCL> insert  into  t 值(空);      1,row 创建。      zx@ORCL>提交;      Commit 完成。      zx@ORCL> select  *,得到t;      ID 名字   - - - - - - - - - - -,- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   1,zx   2,西城   ,3 zxt   ,4   ,5 yhz   ,6      6,rows 选中。

2,测试按

zx@ORCL> select  *,得到t  order  by  name  asc;      ID 名字   - - - - - - - - - - -,- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   2,西城   ,5 yhz   1,zx   ,3 zxt   ,6   ,4      6,rows 选中。      zx@ORCL> select  *,得到t  order  by  name  desc;      ID 名字   - - - - - - - - - - -,- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   ,4   ,6   ,3 zxt   1,zx   ,5 yhz   2,西城      6,rows 选择。

看到不同的排序方式,NULL值所排序的位置不同。升序(asc)零排在最后,降序(desc)零排在最前。

我们再来看看官方文档是怎么描述的

指定排序顺序(升序或降序)只<代码dir=" ltr "> asc>

指定是否返回行包含null应该出现第一个或最后一个命令序列。

<代码dir=" ltr "> null ,<代码dir=" ltr "> ,最后是默认为升序,以及<代码dir=" ltr "> null ,<代码dir=" ltr ">第一次>

可以看到我们的实验结果与官方文档描述是一致的,而且还可以使用NULL姓| NULL来决定零的值是排在最前还是排在最后。

3,再次做实验验证

zx@ORCL> select  *,得到t  order  by  name  asc  nulls ;      ID 名字   - - - - - - - - - - -,- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   ,6   ,4   2,西城   ,5 yhz   1,zx   ,3 zxt      6,rows 选中。      zx@ORCL> select  *,得到t  order  by  name  asc  nulls 去年;      ID 名字   - - - - - - - - - - -,- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   2,西城   ,5 yhz   1,zx   ,3 zxt   ,6   ,4      6,rows 选中。      zx@ORCL> select  *,得到t  order  by  name  desc  nulls ;      ID 名字   - - - - - - - - - - -,- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   ,4   ,6   ,3 zxt   1,zx   ,5 yhz   2,西城      6,rows 选中。      zx@ORCL> select  *,得到t  order  by  name  desc  nulls 去年;      ID 名字   - - - - - - - - - - -,- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   ,3 zxt   1,zx   ,5 yhz   2,西城   ,6   ,4      6,rows 选中。

从结果可以看出使用NULL姓| NULL可以直接控制空值在排序结果的首部还是尾部。

甲骨文order by子句对NULL的排序