第3章 关系数据库标准语言SQL——3.6 空值的处理

简介: 第3章 关系数据库标准语言SQL——3.6 空值的处理

3.6  空值的处理


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

     >>该属性应该有一个值,但目前不知道它的具体值。例如,某学生的年龄属性,因为学生登记表漏填了,不知道该学生年龄,因此取空值。

     >>该属性不应该有值。例如,缺考学生的成绩为空,因为他没有参加考试。

     >>由于某种原因不便于填写。例如,一个人的电话号码不想让大家知道,则取空值。


     因此,空值是一个很特殊的值,含有不确定性,对关系运算带来特殊的问题,需要做特殊的处理。


01 空值的产生


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

insert into SC(Sno,Cno,Grade)
values(‘201215126’,’1’,null);    /*在插入时该学生还没有考试成绩,取空值*/

或:

insert into SC(Sno,Cno)
values(‘201215126’,’1’);      /*在插入语句中没有赋值的属性,其值为空值*/


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

update Student
set Sdept = null
where Sno = ‘201215200’;


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



02 空值的判断


     判断一个属性的值是否为空值,用is null或is not null来表示。


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

select *
from Student
where Sname is null or 
         Ssex is null or 
         Sage is null or 
         Sdept is null;


03 空值的约束条件

    属性定义(或者域定义)中有not null约束条件的不能取空值,加了unique限制的属性不能取空值,码属性不能取空值。04 空值的算术运算、比较运算和逻辑运算

    空值与另一个值(包括另一个空值)的算术运算的结果为空值,空值与另一个值(包括另一个空值)的比较运算的结果为unknown。有了unknown后,传统的逻辑运算中二值(true,false)逻辑就扩展成了三值逻辑。and、or、not的真值表如表3.8所示,其中T表示true,F表示false,U表示unknown。


3.8  逻辑运算符真值表

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


      在查询语句中,只有使where和having子句中的选择条件为true的元组才被选出作为输出结果。


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

select Sno
from SC
where Grade < 60 and Cno = ‘1’;

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


例3.83  选出选修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 < 60 or Grade is null);

相关文章
|
8天前
|
存储 SQL 数据库
数据库sql语句-----游标和存储过程
数据库sql语句-----游标和存储过程
15 1
|
8天前
|
SQL 数据库
SQL主体内容一致,但是对于不同的数据库,对于SQL就可能有一些细节的拓展
SQL主体内容一致,但是对于不同的数据库,对于SQL就可能有一些细节的拓展
19 1
|
2天前
|
SQL 存储 安全
SQL接口如何保护数据库免受未经授权的访问?
【5月更文挑战第21天】SQL接口如何保护数据库免受未经授权的访问?
16 3
|
3天前
|
SQL 存储 数据库
SQL语言的主要组成部分有哪些?
【5月更文挑战第20天】SQL语言的主要组成部分有哪些?
10 1
|
4天前
|
SQL Oracle 关系型数据库
一些SQL数据库工具的介绍
【5月更文挑战第19天】一些SQL数据库工具的介绍
17 4
|
7天前
|
SQL 关系型数据库 MySQL
实时计算 Flink版产品使用合集之当 SQL Server 源数据库中的数据更新后,CDC 吐出的操作(op)是怎样的
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
16 0
|
8天前
|
SQL 关系型数据库 数据管理
Microsoft SQL Server 是微软公司开发的一款关系型数据库管理系统
【5月更文挑战第14天】Microsoft SQL Server 是微软公司开发的一款关系型数据库管理系统
17 2
|
8天前
|
SQL Oracle 关系型数据库
实验四 SQL语言
实验四 SQL语言
7 2
|
8天前
|
SQL 数据库
数据库SQL语言实战(六)
本次实战的重点就在于对表格本身的一些处理,包括复制表格、修改表格结构、修改表格数据
|
8天前
|
SQL Oracle 关系型数据库
数据库SQL语言实战(五)(数据库系统概念第三章练习题)
本文的SQL语言适用的是Oracle数据库与mySQL可能存在略微不同