首页 > Linux操作系统 > Linux操作系统 > 第2章 SQL基本元素:NULL
原文地址:http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements005.htm
如果数据行的某列没有值,则该列被称为null,或者包含空值。null可以出现在不受NOT NULL或者PRIMARY KEY完整性约束的任何数据类型的列上。null用于未知或者没有意义的值。
不要使用null表示0值,因为这两者不是等价的。
注释:
目前Oracle数据库将长度为0的字符串看作null。但是以后的版本中不一定仍然这样,并且Oracle建议用户不要将空字符串看作与null相同。
任何包含null的算术表达式结果总是为null。例如,null加10结果为null。事实上,所有运算符(除了连接操作之外)操作一个null操作数的结果都为null。
SQL函数中的null
所有的标量函数(除了REPLACE、NVL以及CONCAT之外)给定一个null参数时结果为null。可以使用NVL函数在参数为null时返回一个值。例如,表达式NVL(commission_pct, 0)在commission_pct为空时返回0,不为空时返回commission_pct的值。
大多数聚集函数忽略null值。例如,假设一个查询计算1000、null、null、null以及2000这5个值的平均数。查询将会忽略null值,平均值为(1000 + 2000)/2 = 1500。
null值的比较
要检验null,只能使用IS NULL和IS NOT NULL比较条件。如果在其他带null的条件并且结果取决于null值,结果为UNKNOWN。因为null代表缺乏数据,null不能等于(也不能不等于)其他值或者另一个null。但是,在计算DECODE函数时两个null值被看作是相等的。
Oracle也将复合键中的两个null看作是相等的。也就是说包含null的两个复合键,如果非空部分相等,则看作是相同的。
查询条件中的null
结果为UNKNOWN的查询条件与FALSE的作用差不多。例如,一个SELECT语句,WHERE子句中的条件结果为UNKNOWN,返回0行。但是UNKNOWN的条件与FALSE不同之处在于UNKNOWN条件的进一步运算结果仍然为KNOWN。因此,NOT FALSE结果为TRUE,但是NOT UNKNOWN结果为UNKNOWN。
下表显示了各种条件中null计算的示例。如果结果为UNKNOWN的条件用于SELECT语句的WHERE子句中,该查找不会返回任何数据行。
条件 |
A的值 |
结果 |
a IS NULL |
10 |
FALSE |
a IS NOT NULL |
10 |
TRUE |
a IS NULL |
NULL |
TRUE |
a IS NOT NULL |
NULL |
FALSE |
a = NULL |
10 |
UNKNOWN |
a != NULL |
10 |
UNKNOWN |
a = NULL |
NULL |
UNKNOWN |
a != NULL |
NULL |
UNKNOWN |
a = 10 |
NULL |
UNKNOWN |
a != 10 |
NULL |
UNKNOWN |
关于包含null的逻辑条件真值表,参见“第7章 条件”。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24945919/viewspace-747811/ ,如需转载,请注明出处,否则将追究法律责任。