如何使用Oracle ORDER BY语句控制空数据
2008-07-15 14:29
381 查看
空数据,有时被称作“空白”数据,在关系数据库的处理中会造成一些困难。如果一个查询中包含了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语句中,不会显示这些具体的数值。
空数据会造成报告难以阅读,假设我们要进行一个简单的人力资源数据查询,需要降序列出所有的员工姓名和佣金(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语句中,不会显示这些具体的数值。
相关文章推荐
- 如何使用plsql导出oracle数据建表语句,存储过程,视图。以及表中数据
- 在Oracle使用sql语句中如何插入日期格式的数据
- 在Oracle使用sql语句中如何插入日期格式的数据
- 如何使用plsql导出oracle数据建表语句,存储过程,视图。以及表中数据
- Miley's Oracle讲堂第三课:如何在Oracle中使用对象表存储数据.
- dotConnect for Oracle如何在数据集中使用存储进程
- oracle 基础SQL语句 多表查询 子查询 分页查询 合并查询 分组查询 group by having order by
- SQL语句where,Group By,having order by 的详细使用方法
- SQL语句oracle中如何插入Date类型的数据
- SAS如何在不排序的情况下使用by语句
- 使用Hibernate如何在Oracle中插入Date类型的数据
- Oracle使用row_number() over (partition order by)和DISTINCT去除重复记录
- Oracle 使用MERGE INTO 语句更新数据的脚本
- Oracle之sum / over / partition by / order by联合使用
- Oracle导入大量数据时使用控制文件导入数据的方法
- Oracle中merge into的使用:该命令使用一条语句从一个或者多个数据源中完成对表的更新和插入数据.
- 在SqlServer中如何使用Sql语句将一张表的数据复制到另一张表
- Oracle 使用MERGE INTO 语句更新数据
- 使用SQL语句查询MySQL,SQLServer,Oracle所有数据库名和表名,字段名
- 怎么使用robomongo查询mongodb(就像用plsql,输入sql语句,查询oracle数据一样)?