3.6空值的处理

空值的处理

空值就是“不知道”或“不存在”或“无意义”的值。SQL语言中允许某些元组的某些属性在一定情况下取空值。一般有以下几种情况:
·该属性应该有一个值,但目前不知道它的具体值。
·该属性不应该有值。
·由于某种原因不便于填写。
因此,空值是一个很特殊的值,含有不确定性,对关系运算带来特殊的问题,需要做特殊的处理。

1.空值的产生
[例3.79]向SC表中插入一个元组,学生号是“201215126”,课程号是“1”,成绩为空。

INSERT INTO SC(Sno,Cno,Grade)
VALUES(201215126,1,NULL); 		/*在插入时该学生还没有考试成绩,取空值”/

INSERT INTO SC(Sno,Cno)
VALUESC201215126,1); 		/*在插入语句中没有赋值的属性,其值为空值*/

[例3.80]将Student表中学生号为“201215200”的学生所属的系改为空值。

UPDATE Student SET Sdept=NULL 
WHERE Sno= '201215200';

另外,外连接也会产生空值,参见3.4.2小节。空值的关系运算也会产生空值。

2.空值的判断
判断一个属性的值是否为空值,用IS NULL或IS NOTNULL来表示。

[例3.81]从Student表中找出漏填了数据的学生信息。

SELECT*
FROM Student 
WHERE Sname IS NULL OR Ssex IS NULL OR Sage IS NULL OR Sdept IS NULL;

3.空值的约束条件
属性定义(或者域定义)中有NOT NULL约束条件的不能取空值,加了UNIQUE限制的属性不能取空值,码属性不能取空值。

4.空值的算术运算、比较运算和逻辑运算空值

与另一个值(包括另一个空值)
的算术运算的结果为空值,空值与另一个值(包括另一个空值)的比较运算的结果为UNKNOWN。有了UNKNOWN后,传统的逻辑运算中二值(TRUE,FALSE)逻辑就扩展成了三值逻辑。

AND、OR、NOT的真值表如表3.8所示,其中T表示TRUE,F表示FALSE,U表示UNKNOWN。
在查询语句中,只有使WHERE和HAVING
子句中的选择条件为TRUE的元组才被选出作为输出结果。

[例3.82]找出选修1号课程的不及格的学生。

	SELECT Sno 
	FROM SC 
	WHERE Grade <60 AND Cno-=l;

选出的学生是那些参加了考试(Grade属性为非空值)而不及格的学生,不包括缺考的学生。因为前者使条件Grade<60的值为TRUE,后者使条件的值为UNKNOWN。
[例3.83]选出选修1号课程的不及格的学生以及缺考的学生。

SELECT Sno 
FROM SC 
WHERE Grade <60AND Cno = 'l';
UNION 
SELECT Sno 
FROM SC 
WHERE Grade IS NULL AND Cno=-l';

SELECT Sno 
FROM SC 
WHERE Cno='1'AND(Grade<60 OR Grade IS NULL);

数据库系统概论资料:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值