【空值的产生】
在向基本表中插入一个元组时,若还不知道具体的值,可以显式的指定空值
例如,向 sc 表中插入一个元组(学生号:3,课程号:1,成绩:空)
1 | INSERT |
在插入语句 INSERT
中没有赋值的属性,RDBMS 将自动赋为空值
1 | INSERT |
在修改语句 UPDATE
中,可以直接将元组的属性赋为空值
例如,将 student 表中学生号为 1 的学生的所属系设为空值
1 | UPDATE student |
此外,外连接也会产生空值,详见:SQL 连接查询
【空值的判断】
用 IS NULL
或 IS NOT NULL
来判断一个属性的值是否为空值
例如,从 student 表中,找出所属系或年龄为空的学生信息
1 | SELECT * |
【空值的约束条件】
对于以下三种情况,不能取空值:
对于定义有
NOT NULL
约束条件的属性,不能取空值对于定义有
UNIQUE
约束条件的属性,不能取空值- 对于码属性(主码、外码),不能取空值
【空值的运算】
空值的运算有算术运算、比较运算、逻辑运算
其中,空值与另一个值的算术运算结果为空值,比较运算结果为 UNKNOWN
在有了 UNKNOWN
后,传统的逻辑运算中二值逻辑就被扩展为三值逻辑(TRUE
、FALSE
、UNKNOWN
)
三值逻辑的真值表如下
x | y | x AND y | x OR y | NOT x |
---|---|---|---|---|
T | T | T | T | F |
T | U | U | T | F |
T | F | F | T | F |
U | T | U | T | U |
U | U | U | U | U |
U | F | F | U | U |
F | T | F | T | T |
F | U | F | U | T |
F | F | F | F | T |