ITPub博客

首页 > 数据库 > Oracle > 【NULL】Oracle null值介绍

【NULL】Oracle null值介绍

原创 Oracle 作者:xysoul_云龙 时间:2022-03-21 14:32:26 0 删除 编辑

如果一行中的一个列没有值,那么这个列就被称为空,或者说包含空。空值可以出现在任何数据类型的列中,

并且不受NOT NULL或PRIMARY KEY完整性约束的限制。当实际值不为人知或者一个值没有意义的时候,可以使用null。


Oracle数据库将一个长度为0的字符值视为null。然而,不要使用null来表示一个数值为0的数值,因为它们并不等同。


一个评估为UNKNOWN的条件的作用几乎与FALSE相同。

例如,一个在WHERE子句中带有条件的SELECT语句,如果评估为UNKNOWN,则不返回任何记录。

然而,评价为UNKNOWN的条件与FALSE的不同之处在于,对UNKNOWN条件评价的进一步操作将评价为UNKNOWN。

因此,NOT FALSE评估为TRUE,但是NOT UNKNOWN评估为UNKNOWN。


表3-20显示了涉及条件中空值的各种评估的例子。

如果在SELECT语句的WHERE子句中使用了评价为UNKNOWN的条件,那么这个查询就不会有记录被返回。



示例:

-- in null, 通过查看执行计划,发下 他们是or,null值忽略
SQL> select * from t2 where id in (1,2,null);
	ID NAME
---------- ------------------------------
	 1 aaa
	 2 ccc
Execution Plan
----------------------------------------------------------
Plan hash value: 1513984157
--------------------------------------------------------------------------
| Id  | Operation	  | Name | Rows  | Bytes | Cost (%CPU)| Time	 |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |	 |     2 |    14 |     3   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| T2	 |     2 |    14 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - filter("ID"=1 OR "ID"=2)
--改为not in测试,发现 关联是and, and后只要有一个false,则整个是false,所以,无结果
SQL> select * from t2 where id  not in (1,2,null);
no rows selected
Execution Plan
----------------------------------------------------------
Plan hash value: 1513984157
--------------------------------------------------------------------------
| Id  | Operation	  | Name | Rows  | Bytes | Cost (%CPU)| Time	 |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |	 |     1 |     7 |     3   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| T2	 |     1 |     7 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - filter("ID"<>TO_NUMBER(NULL) AND "ID"<>1 AND "ID"<>2)


参考:

链接自动屏蔽,参考Oracle官方书籍 Oracle sql language Reference 中部分章节,如null、not in/in 等,如下图所示:

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29487349/viewspace-2878956/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
主要从事Oracle数据库 DBA相关工作,其他操作系统、中间件等也有涉及,热衷分享。岁月老将至,如有幸在江湖中留点踪迹,也是欣慰。 【文盲筱烨】好读书爱运动的IT技术爱好者 微博:文盲筱烨 微信公众号:筱烨视点

注册时间:2014-02-15

  • 博文量
    412
  • 访问量
    1104551