第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);

相关实践学习
MySQL数据库快速部署实践
本场景主要介绍如何在一台配置了CentOS 7.7版本的ECS实例(云服务器)上安装mysql,执行mysql的常用操作,学习基本的SQL语句。
相关文章
|
1月前
|
SQL 机器学习/深度学习 人工智能
从“写SQL”到“聊数据”:NL2SQL如何用自然语言解锁数据库?
本文系统性地阐述了自然语言转SQL(NL2SQL) 技术如何让非技术背景的业务分析师实现数据自助查询,从而提升数据驱动决策的效率与准确性。
从“写SQL”到“聊数据”:NL2SQL如何用自然语言解锁数据库?
|
2天前
|
SQL 人工智能 Linux
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
39 5
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
|
1天前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
4月前
|
SQL 存储 关系型数据库
第二篇:关系型数据库的核心概念与 SQL 基础
本篇内容深入浅出地讲解了关系型数据库的核心概念与SQL基础,适合有一定计算机基础的学习者。文章涵盖数据库的基本操作(CRUD)、数据类型、表的创建与管理等内容,并通过实例解析SELECT、INSERT、UPDATE、DELETE等语句的用法。此外,还推荐了多种学习资源与实践建议,帮助读者巩固知识。学完后,你将掌握基础数据库操作,为后续高级学习铺平道路。
227 1
|
19天前
|
SQL Oracle 关系型数据库
Oracle数据库创建表空间和索引的SQL语法示例
以上SQL语法提供了一种标准方式去组织Oracle数据库内部结构,并且通过合理使用可以显著改善查询速度及整体性能。需要注意,在实际应用过程当中应该根据具体业务需求、系统资源状况以及预期目标去合理规划并调整参数设置以达到最佳效果。
76 8
|
23天前
|
SQL 人工智能 Java
用 LangChain4j+Ollama 打造 Text-to-SQL AI Agent,数据库想问就问
本文介绍了如何利用AI技术简化SQL查询操作,让不懂技术的用户也能轻松从数据库中获取信息。通过本地部署PostgreSQL数据库和Ollama模型,结合Java代码,实现将自然语言问题自动转换为SQL查询,并将结果以易懂的方式呈现。整个流程简单直观,适合初学者动手实践,同时也展示了AI在数据查询中的潜力与局限。
159 8
|
30天前
|
SQL 人工智能 Linux
SQL Server 2025 RC0 发布 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 RC0 发布 - 从本地到云端的 AI 就绪企业数据库
110 5
|
7天前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
|
3月前
|
SQL 关系型数据库 MySQL
Go语言数据库编程:使用 `database/sql` 与 MySQL/PostgreSQL
Go语言通过`database/sql`标准库提供统一数据库操作接口,支持MySQL、PostgreSQL等多种数据库。本文介绍了驱动安装、连接数据库、基本增删改查操作、预处理语句、事务处理及错误管理等内容,涵盖实际开发中常用的技巧与注意事项,适合快速掌握Go语言数据库编程基础。
264 62
|
2月前
|
SQL 缓存 监控
SqlRest让SQL秒变Http API,还支持20+数据库(含国产数据库)
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。

热门文章

最新文章