SQL语言的空值的处理

3.5 空值的处理

空值就是“不知道”或“不存在”或“无意义”的值。SQL语言中允许某些元组的某些属性在一定的情况下取空值。

1. 空值的可能性

(1) 该属性应该有一个值,但目前不知道它的具体值。

(2) 该属性不应该有值。

(3) 由于某种原因不便于填写。

2. 空值的处理

(1) 空值的产生

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

INSERT INTO SC(Sno,Cno,Grade)

              VALUES('201215126','1',NULL);
/*在插入时该学生还没有考试成绩,取空值*/

INSERT INTO SC(Sno,Cno)

              VALUES('201215126','1');

/*在插入语句中没有赋值的属性,其值为空值*/

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

UPDATE Student

SET Sdept = NULL

WHERE Sno = ‘2012151200’;

另外,空值的运算关系也会产生空值。

(2) 空值的判断

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

[例3] 从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)逻辑就扩展成了三值逻辑。

在查询语句中,只有使用WHERE和HAVING子句中的选择条件为TRUE的元组才被选出作为输出条件。

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

SELECT Sno

FROM SC

WHEREGrade<60 AND Cno='1';

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

[例5] 选出选修1号课程的不及格的学生以及缺考的学生。

SELECT Sno

FROM SC

WHERE Grade<60 AND Cno = '1'

UNION

SELECT Sno

FROM SC

WHERE Grade IS NULL AND Cno = '1';

SELECT Sno

FROM SC

WHERE Cno = '1' AND(Grade IS NULL OR Grade<60);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xclincer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值