Alex_McAvoy

想要成为渔夫的猎手

SQL 的空值处理

【空值的产生】

在向基本表中插入一个元组时,若还不知道具体的值,可以显式的指定空值

例如,向 sc 表中插入一个元组(学生号:3,课程号:1,成绩:空)

1
2
3
INSERT 
INTO sc(Sno, Cno, Grade)
VALUES(3, 1, NULL);

在插入语句 INSERT 中没有赋值的属性,RDBMS 将自动赋为空值

1
2
3
INSERT
INTO sc(Sno, Cno)
VALUES(3, 1);

在修改语句 UPDATE 中,可以直接将元组的属性赋为空值

例如,将 student 表中学生号为 1 的学生的所属系设为空值

1
2
3
UPDATE student
SET Sdept = NULL
WHERE Sno = 1;

此外,外连接也会产生空值,详见:SQL 连接查询

【空值的判断】

IS NULLIS NOT NULL 来判断一个属性的值是否为空值

例如,从 student 表中,找出所属系或年龄为空的学生信息

1
2
3
4
SELECT *
FROM student
WHERE Sdept IS NULL OR
Sage IS NULL;

【空值的约束条件】

对于以下三种情况,不能取空值:

  1. 对于定义有 NOT NULL 约束条件的属性,不能取空值

  2. 对于定义有 UNIQUE 约束条件的属性,不能取空值

  3. 对于码属性(主码、外码),不能取空值

【空值的运算】

空值的运算有算术运算、比较运算、逻辑运算

其中,空值与另一个值的算术运算结果为空值,比较运算结果为 UNKNOWN

在有了 UNKNOWN 后,传统的逻辑运算中二值逻辑就被扩展为三值逻辑(TRUEFALSEUNKNOWN

三值逻辑的真值表如下

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
感谢您对我的支持,让我继续努力分享有用的技术与知识点!