zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

《Oracle SQL疑难解析》——.13 在语句中找到和消除空值

OracleSQL 解析 语句 13 找到 空值 消除
2023-09-11 14:17:30 时间

本节书摘来自异步社区出版社《Oracle SQL疑难解析》一书中的第1章,第1.13节,作者: 【美】Grant Allen , Bob Bryla , Darl Kuhn,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.13 在语句中找到和消除空值

Oracle SQL疑难解析

1.13.1 要解决的问题

我们需要统计出公司中,有多少员工的薪酬里含销售提成(commission percentage),有多少员工的薪酬是固定工资。我们可以用HR.EMPLOYEES表中的COMMISSION_PCT字段来获得数据。

1.13.2 解决方法

HR.EMPLOYEES表的结构允许COMMISSION_PCT字段为空值。有两个查询语句可以分别查找commission percent为空值的人和为非空值的人。首先,查找commission percentage为空值的员工:

select first_name, last_name

from hr.employees

where commission_pct is null;

FIRST_NAME LAST_NAME

-------------------- -------------------------

Donald OConnell

Douglas Grant

Jennifer Whalen

Michael Hartstein

Pat Fay

72 rows selected.

现在查找commission percentage为非空值的人员:

select first_name, last_name

from hr.employees

where commission_pct is not null;

FIRST_NAME LAST_NAME

-------------------- -------------------------

John Russell

Karen Partners

Alberto Errazuriz

Gerald Cambrault

Eleni Zlotkey

35 rows selected.

1.13.3 数据库如何工作

第一个SELECT语句用“COMMISSION_PCT IS NULL”子句测试NULL项。这只会出现两个结果:要么字段为空,即没有值,满足查询条件;要么字段有值。

第二个语句用“COMMISSION_PCT IS NOT NULL”子句,这将找出COMMISSION_PCT 实际值对应的所有EMPLOYEE。

Oracle对空字符串的非标准处理

SQL标准做法是用空或零长度的字符串来代表NULL值,而Oracle并非如此。其中历史的、地域的原因我们无需深究,但一定要记住,Oracle对NULL的规定和用法。对于几乎所有的其他数据库,SQL都把空字符串当作一个独立的、已知的值。

有编程背景的人会发现一些类似的规定,一个0长度的字符串只有一个字符串终结符(0)作为其内容。相反,一个加密的字符串没有确定的状态……即使是一个终结符。我们不能把0长度和未知状态的字符串进行互换,这类似于Oracle如何对待NULL。

1.13.4 NULL不跟任何值相等

在SQL中涉及NULL值的使用诀窍,也是每天必须面对的功课,这经常让人不知所措。每个SQL表达式的结果都是三个值选一:“真”、“假”或“空”。在各种比较、逻辑操作和判断中都是如此。但为避免偶尔的遗忘,我们还是要一再地强调:NULL不跟任何值相等,任何值不跟NULL相等,NULL不等于NULL。试着运行下面的语句,看看你能预猜到答案吗?

select first_name, last_name

from hr.employees

where commission_pct = NULL;

结果是没有任何行返回。即使从前面的SELECT查询中看到EMPLOYEE_ID是72的员工的COMMISSION_PCT为NULL,但因为NULL不等于NULL,所以COMMISSION_PCT=NULL是不成立的,所以查询的结果是没有记录返回。记住,不要用“=”号,而是永远用“IS NULL”或“IS NOT NULL”来寻找或排除NULL值。


深入解析Oracle IMU模式下的REDO格式 1、什么是IMU? 2、在哪些场景下不会使用IMU特性?(Oracle10g出现了IMU,默认开启IMU) 3、如何手动关闭IMU? 4、谈谈一条UPDATE语句从第一步到第九步的整个过程?在IMU模式下对REDO日志做DUMP分析(上图所示:IMU模式的REDO格式)。 5、IMU的主要作用是什么,也就是说为了解决什么问题?
2.0 解析系列 | OceanBase 2.0 的 Oracle 兼容模式 OB君:本文是 “OceanBase 2.0 技术解析系列” 的第九篇文章,今天我们来说说2.0版本最不得不提的——Oracle兼容模式。本文整理自10月27日OceanBase TechTalk北京站活动中酒满的演讲《OceanBase2.0的Oracle兼容模式》。
深入解析:你听说过Oracle数据库的更新重启动吗? 更新重启动是 Oracle 中一个隐藏的知识点,当 Oracle 在读取数据时,会构造读一致性,当读取的内容发生了修改,Oracle 会通过 UNDO 信息来还原数据的前镜像,把数据还原到查询发生的时刻,通过构造一致性的结果来实现读取数据的一致性和隔离性。
Oracle 12.2 新特性 | PDB不同字符集变更深入解析 从12c版本12.1开始,就有了新特性——Pluggable Database,相比较之前通过schema的管理方式实现多用户管理,Pluggable Database实现了进一步的隔离,其中包含如下特点:
将业务用户元数据和数据库本身的元数据进行分离,减少核心数据字典的性能衰减,增加管理便捷性。
异步社区 异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。