第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语句。
相关文章
|
3月前
|
SQL 机器学习/深度学习 人工智能
从“写SQL”到“聊数据”:NL2SQL如何用自然语言解锁数据库?
本文系统性地阐述了自然语言转SQL(NL2SQL) 技术如何让非技术背景的业务分析师实现数据自助查询,从而提升数据驱动决策的效率与准确性。
从“写SQL”到“聊数据”:NL2SQL如何用自然语言解锁数据库?
|
2月前
|
SQL 数据管理 关系型数据库
SQL 语言入门:开启数据管理的大门
在数字化时代,数据已成为核心资产,而 SQL 作为操作关系型数据库的标准语言,是数据从业者、程序员及办公人员必备技能。本文从基础概念讲起,详解 SQL 的核心用法,包括数据查询、插入、修改、删除及表结构操作,并通过实例演示帮助读者快速上手。掌握 SQL,不仅能提升数据处理效率,更为深入理解数据管理打下坚实基础。
|
2月前
|
SQL 人工智能 Linux
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
344 5
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
|
1月前
|
SQL 存储 监控
SQL日志优化策略:提升数据库日志记录效率
通过以上方法结合起来运行调整方案, 可以显著地提升SQL环境下面向各种搜索引擎服务平台所需要满足标准条件下之数据库登记作业流程综合表现; 同时还能确保系统稳健运行并满越用户体验预期目标.
177 6
|
2月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
|
2月前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
1月前
|
SQL Oracle 关系型数据库
SQL语言小结
针对数据库、表单和数据行的增删改,没有涉及到sql真正的用途也就是查询,sql提供的查询语句的关键字占 sql 语言的一半之多,查询语句还是得单拿出来讲,不然太多了。 因为没有涉及到查询,所以sql的新增和修改都是很笼统的做法,drop、alter drop、delete这些很容易,逻辑性也不强,再次说明sql的真正精髓在于查询,不然为啥叫做结构化查询语言
259 0
|
1月前
|
SQL 关系型数据库 MySQL
(SQL)SQL语言中的查询语句整理
查询语句在sql中占了挺大一部分篇幅,因为在数据库中使用查询语句的次数远多于更新与删除命令。而查询语句比起其他语句要更加的复杂,可因为sql是数据库不可或缺的一部分,所以即使不懂,也必须得弄懂,以上。
197 0
|
2月前
|
SQL Oracle 关系型数据库
Oracle数据库创建表空间和索引的SQL语法示例
以上SQL语法提供了一种标准方式去组织Oracle数据库内部结构,并且通过合理使用可以显著改善查询速度及整体性能。需要注意,在实际应用过程当中应该根据具体业务需求、系统资源状况以及预期目标去合理规划并调整参数设置以达到最佳效果。
276 8
|
3月前
|
SQL 人工智能 Java
用 LangChain4j+Ollama 打造 Text-to-SQL AI Agent,数据库想问就问
本文介绍了如何利用AI技术简化SQL查询操作,让不懂技术的用户也能轻松从数据库中获取信息。通过本地部署PostgreSQL数据库和Ollama模型,结合Java代码,实现将自然语言问题自动转换为SQL查询,并将结果以易懂的方式呈现。整个流程简单直观,适合初学者动手实践,同时也展示了AI在数据查询中的潜力与局限。
404 8

热门文章

最新文章