【空值的产生】
在向基本表中插入一个元组时,若还不知道具体的值,可以显式的指定空值
例如,向 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 |