3.6 空值的处理

news2024/11/19 4:29:37

思维导图:

 

**3.6 空值的处理**

在前面的章节中,我们已经多次接触到了空值(NULL)的概念及其处理方式。在这一节中,我们将系统性地深入探讨空值的问题。

**定义:**
空值表示“不知道”、“不存在”或“无意义”的值。SQL语言允许在某些情况下某些元组的某些属性取空值。其出现的原因可以归纳为以下几点:
- 该属性应该有一个值,但当前不知道其具体值。
- 该属性不应该有值。
- 由于某种原因不便于填写。

**1. 空值的产生**
  
   * 例3.79:   
     插入一个学生号为“201215126”的学生、课程号为“1”的记录,但成绩为空。

    INSERT INTO SC(Sno, Cno, Grade)
     VALUES('201215126', '1', NULL);


     或
 

  INSERT INTO SC(Sno, Cno)
     VALUES('201215126', '1');

   * 例3.80:   
     将学生号为“201215200”的学生所属系更改为空值。
 

     UPDATE Student
     SET Sdept = NULL
     WHERE Sno = '201215200';

**2. 空值的判断**

   为了判断一个属性的值是否为空,我们使用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;

**3. 空值的约束条件**

   属性定义中,具有NOT NULL约束的属性不能取空值。另外,具有UNIQUE约束的属性或主键属性也不能取空值。

**4. 空值的运算**

   - **算术运算**:空值与另一个值(包括另一个空值)进行的算术运算结果为NULL。
   - **比较运算**:空值与另一个值(包括另一个空值)进行的比较运算结果为UNKNOWN。
   - **逻辑运算**:因为存在UNKNOWN,所以逻辑运算由二值逻辑扩展为三值逻辑。其真值表如表3.8所示,其中T表示TRUE,F表示FALSE,U表示UNKNOWN。

---

 

总结:

**空值处理总结:**

**重点:**

1. **定义**:空值(NULL)表示数据项的不确定性,如“不知道”、“不存在”或“无意义”。
2. **产生**:插入时某些属性未被赋值、外连接操作、属性更新为NULL等操作可能导致空值的产生。
3. **判断**:使用`IS NULL`或`IS NOT NULL`进行空值判断。
4. **约束**:某些属性,如有NOT NULL或UNIQUE约束的,不能取空值。
5. **运算**:空值参与的算术、比较或逻辑运算会产生特殊结果。

**难点:**

1. **三值逻辑**:传统的二值逻辑(TRUE和FALSE)在涉及到NULL时会扩展成三值逻辑(TRUE、FALSE、UNKNOWN),这使得逻辑判断变得复杂。
2. **参与运算的结果**:空值参与的运算往往结果不如预期直观,例如两个空值进行比较的结果是UNKNOWN而不是TRUE或FALSE。

**易错点:**

1. **误认为NULL与空字符串相同**:在数据库中,空值NULL与空字符串是完全不同的。
2. **不恰当的使用**:在进行查询或更新操作时,直接使用等号(=)来查找或处理NULL是无效的,应该使用`IS NULL`或`IS NOT NULL`。
3. **空值在聚合函数中的表现**:如SUM, AVG等聚合函数在处理空值时通常会忽略它,但COUNT函数会计算非空值。

**使用技巧:**

1. **避免不必要的空值**:在设计数据库时,应仔细考虑哪些字段真的可能需要NULL值,并为其余字段设置NOT NULL约束,以保持数据完整性。
2. **默认值**:为某些可能为NULL的属性设置默认值,可以减少不必要的NULL出现。
3. **CASE语句**:在查询中使用CASE语句可以有效地处理和转换空值。
4. **COALESCE和NULLIF函数**:这些SQL函数允许你更方便地处理和替换空值。
5. **谨慎使用外连接**:外连接可能会导致空值的产生,确保你理解并期望这种行为。

总的来说,理解和正确处理空值是数据库操作中的一个重要环节。为确保数据的完整性和准确性,需要对NULL值有深入的理解,并在实际应用中恰当地使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1089020.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云计算是什么?学习云计算能做什么工作?

很多人经常会问云计算是什么?云计算能干什么?学习云计算能做什么工作?其实我们有很多人并不知道云计算是什么,小知今天来给大家讲讲学习云计算能做什么。 中国的云计算行业目前正处于快速发展阶段,随着互联网和数字化…

介绍使用Photoshop制作ico图标

文章目录 说在前面安装制作插件制作ico 说在前面 Photoshop可以通过ICOFormat.8bi插件生成ico,但需要我们自行安装,安装过程很简单。 安装制作插件 下载地址: http://www.telegraphics.net/sw/ 下载完后解压文件得到下面这样的文件&#…

MySQL数据库的基本操作一

目录 什么是MySQL数据库? 数据库的基本操作 数据库操作 表操作 MySQL的增删改查 插入操作 查找操作 修改操作 删除操作 什么是MySQL数据库? MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关…

Zalo是什么?海外推广怎么做?

zalo是一款海外流行的通讯软件,2012年正式发布,至今已经拥有约2亿的用户,分别在越南、美国、缅甸、日本、台湾、泰国、韩国、马来西亚、沙乌地阿拉伯、安哥拉、斯里兰卡、捷克、俄罗斯地区上架。 zalo的越南用户数量很多,是越南地…

实操指南|如何用 OpenTiny Vue 组件库从 Vue 2 升级到 Vue 3

前言 根据 Vue 官网文档的说明,Vue2 的终止支持时间是 2023 年 12 月 31 日,这意味着从明年开始: Vue2 将不再更新和升级新版本,不再增加新特性,不再修复缺陷 虽然 Vue3 正式版本已经发布快3年了,但据我了…

c++视觉处理---直方图均衡化

直方图均衡化 直方图均衡化是一种用于增强图像对比度的图像处理技术。它通过重新分布图像的像素值,以使图像的直方图变得更均匀,从而提高图像的视觉质量。在OpenCV中,您可以使用 cv::equalizeHist 函数来执行直方图均衡化。以下是 cv::equal…

Xcode 14.3.1build 报错整理

1、Command PhaseScriptExecution failed with a nonzero exit code 2、In /Users/XX/XX/XX/fayuan-mediator-app-rn/ios/Pods/CocoaLibEvent/lib/libevent.a(buffer.o), building for iOS Simulator, but linking in object file built for iOS, file /Users/XX/XX/XX/fayuan…

ASAN入门参考

目录 Asan 是什么? Asan 功能 缓冲区溢出 悬空指针(引用) 非法释放 内存泄漏 如何使用 实验环境 内存泄露检查 demo1 demo2 堆缓冲区溢出 栈缓冲区溢出 使用悬空指针 使用栈上返回的变量 使用退出作用域的变量/内存 重复释放…

逐字稿 | 对比学习论文综述【论文精读】

对比学习在计算机视觉领域的发展历程,4个阶段: 百花齐放:方法、模型、目标函数、代理任务都还没有统一。CV双雄:MOCOv1、SimCLRv1、MOCOv2、SimCLRv2、CPC和CMC的延伸工作、SwaV,这个阶段发展非常迅速,以上…

好莱坞编剧大罢工终于结束;与OpenAI创始人共进早餐;使用DALL-E 3制作绘本分享;生成式AI的基础设施架构 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🔥 好莱坞编剧大罢工终于结束:简单说就是AI妥协了 https://www.wgacontract2023.org/the-campaign/summary-of-the-2023-wga-…

【Pytorch】深度学习之损失函数

文章目录 二分类交叉熵损失函数交叉熵损失函数L1损失函数MSE损失函数平滑L1(Smooth L1)损失函数目标泊松分布的负对数似然损失KL散度MarginRankingLoss多标签边界损失函数二分类损失函数多分类的折页损失三元组损失HingEmbeddingLoss余弦相似度CTC损失函数参考资料 学习目标&am…

CS配合frp上线

代理使用场景 1、拿下远程web服务器 2、webshell链接不稳定,需要使用稳定的木马程序 3、远程服务器无法直接链接攻击者电脑 4、需要借助公网vps转发来自失陷服务器的木马流量 5、借助frp服务端(vps)和客户端(内网攻击者)建立隧道 6、当vps某一个端口收到流量的…

Jenkins更换主目录

Jenkins储存所有的数据文件在这个目录下. 你可以通过以下几种方式更改: 使用你Web容器的管理工具设置JENKINS_HOME环境参数.在启动Web容器之前设置JENKINS_HOME环境变量.(不推荐)更改Jenkins.war(或者在展开的Web容器)内的web.xml配置文件. 这个值在Jenkins运行时…

Ubuntu 启用 root 用户

打开 ubuntu 的终端,现在的命令行是由 zz-virtual-machine:~$ 这几个字母组成,那么这几个字母代表意思为: z当前操作用户是固定格式z-virtual-machine代表的是主机名~代表当前目录名$代表普通用户操作权限#代表 root 用户权限 在安装系统的时…

《论文阅读:Dataset Condensation with Distribution Matching》

点进去这篇文章的开源地址,才发现这篇文章和DC DSA居然是一个作者,数据浓缩写了三篇论文,第一篇梯度匹配,第二篇数据增强后梯度匹配,第三篇匹配数据分布。DC是匹配浓缩数据和原始数据训练一次后的梯度差,DS…

nginx反向代理IIS实现80默认端口,不需要输入端口访问

IIS的网站 端口是8086 Nginx 配置指向IIS的8086 这样可以不用输端口,nginx/confi/nginx.conf server {listen 80;server_name localhost;#charset koi8-r;#access_log logs/host.access.log main;location / {root html ;index index.html index.htm;}location /h…

配电柜远程控制系统:智能化时代的电力管理新篇章

随着科技的发展,电力系统数字化、智能化成为一种趋势。越来越多的市场需求和数字化的政策导向,让配电柜远程控制成为可能,力安科技电易云配电柜远程控制系统应运而生,这种系统利用先进的通信和计算机、人工智能等技术,…

Kafka 开启SASL/SCRAM认证 及 ACL授权(一)认证

Kafka 开启SASL/SCRAM认证 及 ACL授权(一)认证。 kafka安全涉及3部份:传输加密,用户认证与授权,ZK开启ACL(Zookeeper存储了kafka的元数据以及用户信息,默认不开启acl所有用户可改,内网环境机器不对外开放可考虑使用默认不开启ZK ACL)。 官网地址:https://kafka.ap…

dockerfile 搭建lnmp+wordpress,docker-compose搭建lnmp+wordpress

目录 dockerfile 搭建lnmpwordpress 部署nginx(容器IP 为 172.18.0.10) 部署mysql(容器IP 为 172.18.0.20) 部署php(容器IP 为 172.18.0.30) docker-compose搭建lnmpwordpress dockerfile 搭建lnmpword…

LeetCode 2562. 找出数组的串联值【数组,相向双指针】1259

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…