数据库系统概论(十四)详细讲解SQL中空值的处理

article/2025/6/24 19:52:27

数据库系统概论(十四)详细讲解SQL中空值的处理

  • 前言
  • 一、什么是空值?
  • 二、空值是怎么产生的?
    • 1. 插入数据时主动留空
    • 2. 更新数据时设置为空
    • 3. 外连接查询时自然出现
  • 三、如何判断空值?
    • 例子:查“漏填数据的学生”
  • 四、空值的约束规则
  • 五、空值的运算规则(重点)
    • 1. 算术运算(+、-、*、/)
    • 2. 比较运算(>、<、=)
    • 3. 逻辑运算(AND、OR、NOT)


前言

  • 在前几期博客中,我们探讨了 SQL 连接查询,单表查询,嵌套查询,集合查询,基于派生表的查询,数据插入,修改与删除技术等知识点。
  • 从本节开始,我们将深入讲解 SQL 中空值的处理的知识点。

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的数据库系统概论专栏
https://blog.csdn.net/2402_83322742/category_12911520.html?spm=1001.2014.3001.5482


一、什么是空值?

空值(NULL)不是“0”也不是空字符串,它代表 “不知道”“不存在”或“无意义” 的值。
比如:

  • 学生的“成绩”还没录入(不知道);
  • 男生的“性别”字段填“女”是无意义的,但如果字段不限制,可能填NULL(无意义);
  • 某些字段暂时不想填(不便于填写)。

关键提醒:空值是特殊值,不能直接用 = 判断,得用专门的方法处理!

二、空值是怎么产生的?

1. 插入数据时主动留空

比如,学生选了课但还没考试(成绩未知),插入数据时用 NULL 表示:

-- 成绩和教学班未知,用 NULL 占位
INSERT INTO SC(Sno, Cno, Grade, Semester, Teachingclass)
VALUES('20180006', '81004', NULL, '20211', NULL);-- 省略字段时,未指定的字段自动填 NULL
INSERT INTO SC(Sno, Cno, Semester)
VALUES('20180006', '81004', '20211'); -- Grade 和 Teachingclass 自动为 NULL

2. 更新数据时设置为空

比如,学生转专业后暂时未确定新专业,可将原专业清空:

UPDATE Student SET Smajor = NULL WHERE Sno = '20180006';

3. 外连接查询时自然出现

当查询“所有学生及其选课情况”时,没选课的学生在选课相关字段会显示空值:

-- 左外连接,没选课的学生 Cno 和 Grade 为 NULL
SELECT Student.Sno, Sname, Cno, Grade
FROM Student LEFT OUTER JOIN SC ON Student.Sno = SC.Sno;

结果类似:

SnoSnameCnoGrade
20180006赵明NULLNULL

三、如何判断空值?

不能用 =!=,必须用 IS NULLIS NOT NULL

例子:查“漏填数据的学生”

SELECT * FROM Student
WHERE Sname IS NULL OR Ssex IS NULL OR Smajor IS NULL;
  • 主码(如学号 Sno)不允许为空,否则会报错(实体完整性规则)。

四、空值的约束规则

  1. 非空约束(NOT NULL)
    创建表时指定字段不许为空,比如:

    CREATE TABLE Student (Sno CHAR(8) NOT NULL,  -- 学号不许为空Sname VARCHAR(20) NOT NULL,...
    );
    
  2. 主码字段必须非空
    主键(如学号、课程号)是唯一标识数据的“身份证”,必须填值,否则违反 实体完整性

    • 学生表的 Sno 不能为 NULL;
    • 选课表 SC 的联合主键 (Sno, Cno) 都不能为 NULL。

五、空值的运算规则(重点)

空值参与运算时,结果往往也是“不确定”的,分三类来看:

1. 算术运算(+、-、*、/)

  • 任何值与 NULL 运算,结果都是 NULL。
SELECT 5 + NULL; -- 结果是 NULL(不确定)

2. 比较运算(>、<、=)

  • 任何值与 NULL 比较,结果都是 UNKNOWN(既不是真也不是假)。
SELECT * FROM SC WHERE Grade < 60;  
  • 成绩为 NULL 的学生(缺考)不会被这条语句查到,因为 NULL < 60 是 UNKNOWN。

3. 逻辑运算(AND、OR、NOT)

引入三值逻辑:TRUE(真)、FALSE(假)、UNKNOWN(不确定),规则如下:

运算例子结果
ANDTRUE AND UNKNOWNUNKNOWN
ORFALSE OR UNKNOWNUNKNOWN
NOTNOT UNKNOWNUNKNOWN

实际应用:查询不及格或缺考的学生

-- 方法1:用 UNION 合并两种情况
SELECT Sno FROM SC WHERE Grade < 60 AND Cno = '81001'
UNION
SELECT Sno FROM SC WHERE Grade IS NULL AND Cno = '81001';-- 方法2:用 OR 直接判断
SELECT Sno FROM SC 
WHERE Cno = '81001' AND (Grade < 60 OR Grade IS NULL);

以上就是这篇博客的全部内容,下一篇我们将继续探索更多精彩内容。

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的数据库系统概论专栏
https://blog.csdn.net/2402_83322742/category_12911520.html?spm=1001.2014.3001.5482

非常感谢您的阅读,喜欢的话记得三连哦

在这里插入图片描述


http://www.hkcw.cn/article/tIZeohgOCO.shtml

相关文章

我国代表反驳对华无端指责:无中生有 颠倒黑白 贼喊捉贼

我国代表反驳对华无端指责。5月31日,参加第22届香格里拉对话会的中国代表团团长、中国人民解放军国防大学副校长兼教育长胡钢锋出席《亚太地区海事安全合作》特别论坛,并阐述中方观点。他首先反驳了当天上午大会发言中涉及中方的内容。他表示,我们不接受对中方的无端指责,有…

喊话万科,74岁的王石难有“真还传” 万科面临转型挑战

喊话万科,74岁的王石难有“真还传” 万科面临转型挑战。对于如今的万科来说,他们需要的是“化腐朽为神奇”的钞能力,而不是“剪刀手”。近期地产圈和网络上热议的话题是,如果王石重新回归万科,是否会有奇迹发生。5月27日,万科创始人王石在朋友圈发布了一则长文,表示正在…

国际组织:美债务飙升不仅危及自身更可能引发全球债券市场危机

国际组织:美债务飙升不仅危及自身。5月31日报道,国际金融协会最近的一份报告警告,美国债务飙升的影响不仅限于国内经济,更可能引发全球债券市场危机。报告显示,一些国家的借贷成本往往与美国国债同步变动,这意味着美国国债的波动将对其它债务产生连锁反应。报告写道,“由…

一句古语看懂中方如何应对抹黑!

一句古语看懂中方如何应对抹黑。第22届香格里拉对话会闭幕了这期间,谭主在香会现场看到了美菲防长的无理挑衅甚至连中国记者都变成了菲防长口中的“特工”这说明他们急了,为什么?一句古语看懂中方如何应对抹黑责任编辑:0882

005-C/C++内存管理

C/C内存管理 1. C/C内存分布 栈–存储非静态局部变量/函数参数/返回值等等&#xff0c;栈是向下增长的。内存映射段是高效的I/O映射方式&#xff0c;用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存&#xff0c;做进程间通信&#xff08;这是系统部分的知识…

tex中的表格4:自动表格宽度自动换行tabularx宏包

文章目录 介绍语法规则示例 自定义 X 列的对齐方式多行与多列处理长表格 介绍 在 LaTeX 里&#xff0c;tabularx 是一个很实用的包&#xff0c;它能够创建宽度固定的表格&#xff0c;而且可以自动对列宽进行调整。 语法规则 \usepackage{tabularx} \begin{tabularx}{总宽度}…

数据结构之排序

正值数据结构期末复习之际&#xff0c;遂将排序相关的复习内容记录在此&#xff0c;也算是对知识的一种整理归纳和复习。 常见的排序方法:插入排序、交换排序、选择排序、归并排序、基数排序 其中插入排序又包含直接插入排序、折半插入排序、希尔排序。 交换排序有包括冒泡排…

【Hot 100】118. 杨辉三角

目录 引言杨辉三角我的解题代码优化优化说明 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;算法专栏&#x1f4a5; 标题&#xff1a;【Hot 100】118. 杨辉三角❣️ 寄语&#xff1a;书到用时方恨少&#xff0c;事非经过不知难&#xff01; 引言 …

【Linux网络】传输层TCP协议

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343 &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/qinjh_/category_12891150.html 目录 TCP 协议 TCP 协议段格式 确认应答(ACK)机制 超时重传机制 连接管理机制 …

【C语言】C语言经典小游戏:贪吃蛇(上)

文章目录 一、游戏背景及其功能二、Win32 API介绍1、Win32 API2、控制台程序3、定位坐标&#xff08;COORD&#xff09;4、获得句柄&#xff08;GetStdHandle&#xff09;5、获得光标属性&#xff08;GetConsoleCursorInfo&#xff09;1&#xff09;描述光标属性&#xff08;CO…

【Python 算法零基础 4.排序 ⑥ 快速排序】

既有锦绣前程可奔赴&#xff0c;亦有往日岁月可回首 —— 25.5.25 选择排序回顾 ① 遍历数组&#xff1a;从索引 0 到 n-1&#xff08;n 为数组长度&#xff09;。 ② 每轮确定最小值&#xff1a;假设当前索引 i 为最小值索引 min_index。从 i1 到 n-1 遍历&#xff0c;若找到…

Global Securities Markets 第7章知识点总结

一、银行中介的角色定位与核心作用 1. 角色定位&#xff1a;证券流转的核心枢纽 银行作为证券中介&#xff0c;在投资者与证券市场之间扮演三重角色&#xff1a; 资产托管者&#xff1a;负责证券实物或电子形式的安全保管&#xff08;如美国道富银行托管全球ETF资产&#xf…

docker B站学习

镜像是一个只读的模板&#xff0c;用来创建容器 容器是docker的运行实例&#xff0c;提供了独立可移植的环境 https://www.bilibili.com/video/BV11L411g7U1?spm_id_from333.788.videopod.episodes&vd_sourcee60c804914459274157197c4388a4d2f&p3 目录挂载 尚硅谷doc…

我爱学算法之—— 前缀和(上)

一、【模板】前缀和 题目解析 这道题&#xff0c;给定一个长度为n的数组&#xff0c;和m次询问&#xff1b; 每一次询问给出两个整数l和r&#xff0c;让我们求出区间[l , r]中所有数的和&#xff0c;然后输出。 算法思路 这道题暴力解法&#xff1a; 首先是m次查询&#xff0…

RK3568+LINUX + CODESYS带授权+实时系统,同时开自己的视觉应用

RK3568LINUX CODESYS带授权实时系统,同时开自己的视觉应用&#xff0c;让你即可以选择几个核心跑codesys&#xff0c;又可以选几个核心跑自定义的应用。 基于RK3568处理器构建的工业控制与视觉融合解决方案&#xff0c;可通过以下技术架构实现&#xff1a; 一、硬件平台核心配…

Boss直聘批量投简历工具使用教程

Boss直聘批量投简历工具使用教程 为什么boss有活跃度显示 但是不给我们筛选&#xff0c;推荐的十个七个都是十天半个月不在线的岗位hr 我投递了有意思吗 不就是在浪费我们的精力 同时也浪费了每天的投递次数 第二个问题 我想做一个批量投简历工具 或者&#xff08;自动投简历…

写个简单的浏览器插件,收藏网页内容

要求&#xff1a; 此时我觉得都ok了。请帮我写一篇文章来介绍这个项目。从最初的要求到最后实现的效果。要求篇幅不要太长&#xff0c;语言幽默有趣&#xff0c; 平易近人&#xff0c; 有吸引力。重点介绍的是起因&#xff0c;即&#xff0c;需求和起因增加篇幅&#xff0c;其…

Attention注意力机制

Attention核心思想 作用&#xff1a;处理时序问题 核心思想&#xff1a;处理序列数据时&#xff0c;网络应该更加关注输入中重要的部分&#xff0c;忽略不重要的部分。 要怎么做到&#xff1f; 通过学习不同部分的权重&#xff0c;将输入的序列中的重要部分显式加权&#xf…

CRC 原理概述

CRC 原理概述 摘要&#xff1a;循环冗余校验&#xff08;CRC, Cyclic Redundancy Check&#xff09;是一种基于多项式除法&#xff08;modulo-2&#xff09;的差错检测码。它将数据视为一个二进制多项式 D(x)&#xff0c;生成多项式为 G(x)&#xff0c;通过“除法”得到的余数 …

风控研发大数据学习路线

在如今信息爆炸时代&#xff0c;风控系统离不开大数据技术的支撑&#xff0c;大数据技术可以帮助风控系统跑的更快&#xff0c;算的更准。因此&#xff0c;风控技术研发需要掌握大数据相关技术。然而大数据技术栈内容庞大丰富&#xff0c;风控研发同学很可能会面临以下这些痛点…