如何使用Oracle ORDER BY语句控制空数据

如何使用Oracle ORDER BY语句控制空数据(转)

空数据,有时被称作“空白”数据,在关系数据库的处理中会造成一些困难。如果一个查询中包含了ORDER BY语句对输出结果进行排序,那么使用升序时,空数据的结果会排在最底部;而使用降序排列时,空数据的结果会排在最顶部。实际上,空数据在Oracle数据库中被当作一个非常大的数值来处理的。

 

空数据会造成报告难以阅读,假设我们要进行一个简单的人力资源数据查询,需要降序列出所有的员工姓名和佣金(commission)比例,包括没有佣金收入的员工(commission_pct的值是空值),此查询的SQL代码是:

SELECT employee_id, last_name, first_name, commission_pct

FROM employees

ORDER BY commission_pct DESC;

 

运行这个查询的结果是没有用尽收入的员工会排在最前面,您需要详细查看才能发现到底谁获得了佣金收入。

在Oracle 8i中,有一个不太常用的语法可以修正这个问题,您所需要做的事情就是将以上SQL代码中的最后一样修改为:

ORDER BY commission_pct DESC NULLS LAST;

这样,含有空值的数据行就会排到最后,您也可以在升序排序中使用NULLS FIRST,这样含有空值的数据行会出现在报告的顶部。

如果您还在使用Oracle 8.0版或7.3版,那么您可以使用空值函数(Null Values function (NVL))来实现同样的效果。比如,以下是使用ORDER BY语句的例子:

 

ORDER BY NVL(commission_pct, -1);

 

这样,还有空值的数据行被当作-1值来进行排序,这样它们就会出现在输出结果的底部,而您也不会看到-1值出现在排序结果中,因为数据库查询是根据空值函数进行操作的,在SELECT语句中,不会显示这些具体的数值。

posted @ 2008-07-19 11:42  不羁  阅读(629)  评论(0编辑  收藏  举报