软件测试|SQL中的null值,该如何理解?

深入理解SQL中的Null值:处理缺失数据的重要概念

简介

Null值在SQL中是用于表示缺失或未知数据的特殊值。本文将深入探讨Null值的概念、处理方法和注意事项,以帮助读者更好地理解和处理SQL中的缺失数据。

在SQL数据库中,Null值是一种特殊的值,用于表示缺失或未知的数据。它与其他具体的数值、字符串或日期不同,Null值表示该字段在特定记录中没有有效值。下面我们将深入探讨Null值的重要性、处理方法和注意事项。

Null值的重要性:

Null值在数据库中具有重要的作用。它能够表示缺失数据、未知数据或未适用的数据情况。Null值使数据库能够处理现实世界中的不完整信息,避免在未知情况下做出错误的假设。同时,Null值也可以帮助区分空字符串、零值和未定义值之间的差异。

处理方法:

  • 查询和比较:在SQL查询中,Null值的处理需要特别注意。Null值不能通过常规的比较运算符(如等于、大于或小于)进行比较。相反,应使用特殊的运算符(如IS NULL和IS NOT NULL)来检查字段是否为Null值。

  • 函数和运算:在处理包含Null值的数据时,SQL提供了一些函数和运算符来处理Null值。例如,COALESCE函数可以用于返回一系列值中的第一个非Null值,NVL函数可以在Null值的情况下提供默认值。此外,使用ISNULLIFNULLNULLIF等函数也能对Null值进行处理。

  • 聚合函数:在使用聚合函数(如SUM、AVG、COUNT等)进行计算时,Null值的处理需要特别注意。聚合函数通常会忽略Null值,因此在对包含Null值的数据进行计算时,需要考虑Null值的影响,并选择合适的处理方式。

Null值的注意事项:

  • 索引和唯一约束:在设计数据库表时,应谨慎使用包含Null值的字段作为索引或唯一约束。因为Null值不会被索引或唯一约束考虑,可能导致查询性能下降或数据冗余。

  • 外键约束:在使用外键约束时,需要注意与Null值相关的引用完整性。当父表中的主键值为Null时,应确保在子表中可以处理或限制Null值的引用。

  • 数据逻辑和业务需求:Null值的处理需要根据具体的数据逻辑和业务需求进行决策。有时,Null值可能是有效的数据状态,而在其他情况下,它可能表示错误或缺失数据。因此,在设计数据库模型和编写查询时,应根据具体场景合理处理Null值。

语法

  1. 在创建数据表时可以指定某个字段是否允许为 NULL,基本语法如下:
CREATE TABLE Customers (id      INT              NOT NULL   AUTO_INCREMENT,name    VARCHAR(20)      NOT NULL,age     TINYINT UNSIGNED NOT NULL,city    INT UNSIGNED     NOT NULL,Consumption amount      FLOAT                       DEFAULT '0',country CHAR(3)          NOT NULL   DEFAULT '',email   VARCHAR(30),PRIMARY KEY (`id`)
);

NOT NULL 关键字表示不允许该字段为空值,在插入或者更新记录时必须为该字段指定一个具体的值。Consumption amountemail字段没有使用 NOT NULL 关键字,这意味着它们保持默认,也即允许为 NULL。注意,Consumption amount字段指定了默认值 0,如果不为该字段提供值,它的值将是 0,email 字段没有指定默认值,如果不为该字段提供值,它的值将是 NULL。

  1. 在选取数据时,NULL 值可能会导致一些问题,因为 NULL 值和其它任何值比较的结果都是未知的,所以包含 NULL 值的记录始终不能被筛选。我们不能使用 =、<、> 等比较运算符来检测 NULL 值,而必须使用 IS NULL 或者 IS NOT NULL 关键字来检测 NULL 值。

现在有一个包含如下记录的 Customers 表:

+----------+----------------+---------+-------------+---------+-----------+----------------+
|CustomerId|CustomerName    | Country |   City      |   Age   |Consumption|email           |
|00001     |Muller Cheng    | China   | Shanghai    |   25    |2000       |cheng@qq.com    |
|00002     |Kevin Durant    | USA     | Phoenix     |   34    |3000       |kevin@qq.com    |
|00003     |Libin Tian      | China   | Kaifeng     |   31    |0          |tian@163.com    |
|00004     |Junye  Li       | China   | Guangzhou   |   32    |1500       |junye@qq.com    |
|00005     |Leborn James    | USA     | LosAngles   |   39    |4000       |null            |
|00006     |Stephen Curry   | USA     | SanFrancisco|   35    |3500       |curry@qq.com    |
|00007     |Humphrey Appleby| UK      | London      |   56    |3000       |humpy@qq.com    |
|00008     |Jim Hacker      | UK      | London      |   60    |0          |null            |
|00009     |Thomas Muller   | Germany | Munich      |   34    |2500       |muller@gmail.com|
|00010     |Miro Klose      | Germany | Berlin      |   45    |1500       |null            |

下面是 IS NOT NULL 关键字的用法:

SELECT  CustomerId, CustomerName, Country
FROM Customers
WHERE email IS NOT NULL;

查询结果如下:

+----------+----------------+---------+
|CustomerId|CustomerName    | Country |  
|00001     |Muller Cheng    | China   | 
|00002     |Kevin Durant    | USA     | 
|00003     |Libin Tian      | China   | 
|00004     |Junye  Li       | China   | 
|00006     |Stephen Curry   | USA     | 
|00007     |Humphrey Appleby| UK      | 
|00009     |Thomas Muller   | Germany |

下面是 IS NULL 关键字的用法:

SELECT  CustomerId, CustomerName, Country
FROM Customers
WHERE email IS  NULL;

查询结果如下:

+----------+----------------+---------+
|CustomerId|CustomerName    | Country |   
|00005     |Leborn James    | USA     | 
|00008     |Jim Hacker      | UK      | 
|00010     |Miro Klose      | Germany | 

总结

Null值在SQL数据库中是处理缺失或未知数据的重要概念。通过理解Null值的概念、处理方法和注意事项,可以更好地处理包含Null值的数据,确保数据分析和查询的准确性和一致性。在使用Null值时,我们应该谨慎处理,合理运用相关函数和运算符,以确保数据处理的准确性和可靠性。同时,我们还应根据具体的数据逻辑和业务需求,选择合适的Null值处理策略,以确保数据库中的数据质量和完整性。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第九节HarmonyOS 常用基础组件10-TextClock

1、描述 TextClock组件通过文本将当前系统时间显示在设备上。支持不同时区的时间显示&#xff0c;最高精度到秒级。 2、接口 TextClock(options?: {timeZoneOffset?: number, controller?: TextClockController}) 3、参数 参数名称 参数类型 必填 描述 timeZoneOffs…

同步检查继电器 DT-1/200 100V 板后接线 面板安装 JOSEF约瑟

系列型号 DT-1/200同步检查继电器; DT-1/160同步检查继电器; DT-1/130同步检查继电器; DT-1/120同步检查继电器; DT-1/90同步检查继电器; DT-1/254同步检查继电器; 一、用途 DT-1型同步检查继电器用于两端供电线路的自动重合闸线路中&#xff0c;其作用在于检查线路上电压的存…

【数据分享】2023年我国土壤数据集HWSD2.0(免费获取/7个土壤深度/40多种土壤指标)

土壤数据&#xff0c;包括土壤类型、土壤酸碱度、土壤沙含量等指标&#xff0c;对于农业、林业、园艺、环境保护等领域都非常重要。 本次我们为大家带来的是2023年1月份发布的我国土壤数据库&#xff0c;包括国界范围的数据和分省份的数据。该数据的核心信息如下&#xff1a; …

labelme的json转mask,实测有效

1、创建一个conda的虚拟环境 conda creat -n labelme python3.82、转到你的标注文件夹&#xff08;包括json和图片&#xff09; cd C:/Users/Administrator/Desktop/json3、你需要在标注文件夹下用txt写下以下代码&#xff0c;并保存bat文件。 放在最后一个就可以了 echo of…

法一(auto-py-to-exe):Pyinstaller将yolov5的detect.py封装成detect.exe

pip install pyinstaller # 安装最新版本的pyinstaller指令# 在dist目录下只生成一个较大xxx.exe文件&#xff0c;所有依赖库全打包到exe中&#xff0c;打包后的exe可单独使用 pyinstaller -F xxx.py # 在dist目录下生成较小的exe文件&#xff0c;其他依赖库全都在dist文件夹下…

二、类与对象(四)

22 内部类 22.1 内部类的概念 如果一个类定义在另一个类的内部&#xff0c;这个类就叫做内部类。内部类是一个独立的类&#xff0c;它不属于外部类&#xff0c;更不能通过外部类的对象去访问内部类的成员&#xff0c;外部类对内部类没有任何优越的访问权限&#xff0c;也就是…

CNN——LeNet

1.LeNet概述 LeNet是Yann LeCun于1988年提出的用于手写体数字识别的网络结构&#xff0c;它是最早发布的卷积神经网络之一&#xff0c;可以说LeNet是深度CNN网络的基石。 当时&#xff0c;LeNet取得了与支持向量机&#xff08;support vector machines&#xff09;性能相…

如何安装 Python

1.打开浏览器 输入网址 :www.python.org ​ 2.根据电脑系统配置进行下载 ​ 3.确定电脑系统属性&#xff0c;此处我们以win10的64位操作系统为例 ​ 4.安装python 3.6.3 双击下载的安装包 python-3.6.3.exe 注意要勾选&#xff1a;Add Python 3.6 to PATH 点击 Customize…

jdbc源码研究

JDBC介绍 JDBC&#xff08;Java Data Base Connectivity,java数据库连接&#xff09;是一种用于执行SQL语句的Java API&#xff0c;可以为多种关系数据库提供统一访问&#xff0c;它由一组用Java语言编写的类和接口组成。 开发者不必为每家数据通信协议的不同而疲于奔命&#…

从0开始python学习-42.requsts统一请求封装

统一请求封装的目的&#xff1a; 1.去除重复的冗余的代码 2. 跨py文件实现通过一个sess来自动关联有cookie关联的接口。 3. 设置统一的公共参数&#xff0c;统一的文件处理&#xff0c;统一的异常处理&#xff0c;统一的日志监控&#xff0c;统一的用例校验等 封装前原本代…

乐理燥废笔记

乐理燥废笔记 文章目录 终止式小调音阶转调不协和和弦进行大小转调1251 1451转调我的霹雳猫阿诺三全音代理五声音阶又怎样和弦附录&#xff1a;压缩字符串、大小端格式转换压缩字符串浮点数压缩Packed-ASCII字符串 大小端转换什么是大端和小端数据传输中的大小端总结大小端转换…

静态网页设计——旅游网(HTML+CSS+JavaScript)

前言 声明&#xff1a;该文章只是做技术分享&#xff0c;若侵权请联系我删除。&#xff01;&#xff01; 感谢大佬的视频&#xff1a; https://www.bilibili.com/video/BV1KN4y1v7jx/?vd_source5f425e0074a7f92921f53ab87712357b 使用技术&#xff1a;HTMLCSSJS&#xff08;…