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

news2024/11/17 21:23:57

深入理解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.coloradmin.cn/o/1359277.html

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

相关文章

BEV+Transformer感知架构共识下,传感器「火药味」再升级

高阶智能驾驶战火愈演愈烈&#xff0c;正带动感知方案卷入新一轮军备竞赛。 根据高工智能汽车研究院最新发布数据显示&#xff0c;2023年1-9月&#xff0c;中国市场&#xff08;不含进出口&#xff09;乘用车前装标配&#xff08;软硬件&#xff09;NOA交付新车37.73万辆&…

Linux下NUMA 内存管理初步理解

LINUX 系统在多核下,以及NUMA架构技术下 如何管理物理内存? 经过初步了解 发现系统对内存有以下工作 1 映射 2 内存碎片 3 内存回收 4 内存池 5 冷热页 6 水位线和保留内存 7 支持内存条热插拔 8 大页管理 这些功能给人感觉,尤其是DBA感觉是重新实现了数据缓存池的功…

机器学习(三) -- 特征工程(1)

系列文章目录 机器学习&#xff08;一&#xff09; -- 概述 机器学习&#xff08;二&#xff09; -- 数据预处理&#xff08;1-3&#xff09; 机器学习&#xff08;三&#xff09; -- 特征工程&#xff08;1-2&#xff09; 未完待续…… 目录 系列文章目录 前言 一、特征…

大数据开发的专业术语

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 系列专栏目录 [Java项…

画中画视频剪辑:创意与技术的完美结合,批量制作视频不再难

随着科技的飞速发展&#xff0c;视频制作已成为信息时代的一种重要表达方式。其中画中画视频剪辑技术更是以其独特的创意性和技术性&#xff0c;为观众的视觉体验带来了全新的冲击。它不仅为创作者提供了更广阔的创意空间&#xff0c;同时也降低了视频制作的门槛。现在一起来看…

VSCode Jupyter print 函数输出在错误的单元格(cell)

问题描述 最近在复现一个开源项目时&#xff0c;发现执行过该项目中的代码单元格后&#xff0c;其余单元格的print函数输出也会续在该单元格后。而正常情况下print函数输出应该位于其所属的单元格。下图中&#xff0c;我将出现问题的单元格执行后清空了输出&#xff0c;但是在…

深度解析 Compose 的 Modifier 原理 -- Modifier.composed()、ComposedModifier

众所周知&#xff1a;原理性分析的文章&#xff0c;真的很难讲的通俗易懂&#xff0c;讲的简单了就没必要写了&#xff0c;讲的繁琐难懂往往大家也不乐意看&#xff0c;所以只能尽量找个好的角度&#xff08;比如从 Demo 代码示例出发&#xff09;慢慢带着大家去钻源码&#xf…

书生·浦语大模型全链路开源开放体系

书生浦语大模型全链路开源体系_哔哩哔哩_bilibili 大模型全链路开源开放体系等你来探索~ https://github.com/internLM/tutorial 书生浦语全链条开源开放体系 1&#xff09;数据: 书生万卷 2TB数据&#xff0c;并行训练&#xff0c;极致优化涵盖多种模态与任务 预训练: I…

聚道云软件连接器助力某动漫行业公司实现财务自动化

客户介绍 某动漫行业公司是一家专注于文化创意领域&#xff0c;致力于为人们提供独特、有趣的文化产品。公司拥有一支充满活力和创造力的团队&#xff0c;他们以卓越的创意和精湛的技术&#xff0c;创造出了一系列令人惊叹的作品。未来&#xff0c;该公司将继续秉承这一理念&a…

低代码开发平台支持复杂的业务逻辑和API对接吗

当今数字化时代&#xff0c;企业和组织面临着日益复杂的业务需求。为了应对这些挑战&#xff0c;低代码开发平台应运而生。白码低代码开发平台是一种高效、灵活且可扩展的开发工具&#xff0c;能够支持复杂的业务逻辑和第三方API对接&#xff0c;为企业带来更快速、更灵活的解决…

Rust 字符串 初步了解

rust 的字符串 。字符串不是复合类型&#xff0c; String 和 &str &#xff1a; String 具有所有权&#xff0c;是存储在堆上的。&str 没有所有权&#xff0c;是对 String 的引用。字符串字面量也是 &str 类型&#xff0c;存储在栈上。 切片&#xff08;slice&a…

线性代数 --- 为什么LU分解中L矩阵的行列式一定等于(+-)1?

以下是关于下三角矩阵L的行列式一定等于-1的一些说明 证明&#xff1a;在LU分解中&#xff0c;下三角矩阵L的行列式一定是. 在证明之前&#xff0c;我这里先补充几条关于行列式的性质&#xff1a; 性质1&#xff1a;对于三角矩阵而言&#xff0c;不论是上三角矩阵还是下三角矩…

Qt6学习笔记:对象树

使用QObject及其子类创建的对象是以对象树的形式来组织的。创建一个QObject对象时若设置一个父对象&#xff0c;它就会被添加到父对象的子对象列表里&#xff0c;一个父对象被删除时&#xff0c;其全部的子对象都会自动删除。QObject类的构造函数里有一个参数用于设置对象的父对…

PyTorch基础操作

一、Tensor 在 PyTorch 中&#xff0c;张量&#xff08;Tensor&#xff09;是一个核心概念&#xff0c;它是一个用于存储和操作数据的多维数组&#xff0c;类似于 NumPy 的 ndarray&#xff0c;但与此同时&#xff0c;它也支持 GPU 加速&#xff0c;这使得在大规模数据上进行科…

数据结构和算法-希尔排序(增量序列 算法实现 性能分析 稳定性)

文章目录 希尔排序过程小结增量序列不是固定的 算法实现算法性能分析稳定性小结 希尔排序 基本有序&#xff0c;就是存在有序的子序列 通过增量4得到各个子表 对各个子表分别进行插入排序 缩小增量&#xff0c;再除2&#xff0c;此时的子表 对各个子表插入排序 缩小增量&…

数据库设计——DQL

D Q L \huge{DQL} DQL ⭐⭐⭐⭐⭐ DQL&#xff1a;数据库查询语言&#xff0c;用来查询数据库中的记录&#xff0c;非常的重要&#xff0c;对于数据库的操作修改相对来讲还是较少部分&#xff0c;绝大多数操作都是数据查询。 整体的语法结构&#xff1a; 基本查询 示例&#…

2024最新Java基础面试题大全(一)

1、String可以被继承&#xff1f; 不能被继承&#xff0c;因为String类有final修饰符&#xff0c;而final修饰的类是不能被继承的。 public final class String implements java.io.Serializable, Comparable<String>, CharSequence {// 省略...  }2、常见集合类 Java…

C语言编译器(C语言编程软件)完全攻略(第十七部分:Dev C++使用教程(使用Dev C++编写C语言程序))

介绍常用C语言编译器的安装、配置和使用。 十七、Dev C使用教程&#xff08;使用Dev C编写C语言程序&#xff09; 前面我们给出了一段完整的C语言代码&#xff0c;就是在显示器上输出“C语言中文网”&#xff0c;如下所示&#xff1a; #include <stdio.h> int main() {…

Java 新手如何使用Spring MVC RestAPI的加密

目录 前言 为什么需要加密RestAPI&#xff1f; 使用Spring Boot创建RestAPI 使用HTTPS加密RestAPI 使用Spring Security增加安全性 使用JWT实现令牌身份验证 使用Postman测试加密的RestAPI 总结 前言 作者简介&#xff1a; 懒大王敲代码&#xff0c;计算机专业…

HarmonyOS应用开发之DevEco Studio安装与初次使用

1、DevEco Studio介绍 DevEco Studio是基于IntelliJ IDEA Community开源版本打造&#xff0c;面向华为终端全场景多设备的一站式集成开发环境&#xff08;IDE&#xff09;&#xff0c;为开发者提供工程模板创建、开发、编译、调试、发布等E2E的HarmonyOS应用/服务的开发工具。…