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