【NULL】Oracle null值介绍

来源:这里教程网 时间:2026-03-03 17:31:49 作者:

如果一行中的一个列没有值,那么这个列就被称为空,或者说包含空。空值可以出现在任何数据类型的列中, 并且不受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 等,如下图所示:

相关推荐