首页 > 数据库 >软件测试|SQL中的null值,该如何理解?

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

时间:2023-08-02 18:37:23浏览次数:41  
标签:null 处理 com NULL SQL Null 数据 软件测试

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

深入理解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       |[email protected]    |
|00002     |Kevin Durant    | USA     | Phoenix     |   34    |3000       |[email protected]    |
|00003     |Libin Tian      | China   | Kaifeng     |   31    |0          |[email protected]    |
|00004     |Junye  Li       | China   | Guangzhou   |   32    |1500       |[email protected]    |
|00005     |Leborn James    | USA     | LosAngles   |   39    |4000       |null            |
|00006     |Stephen Curry   | USA     | SanFrancisco|   35    |3500       |[email protected]    |
|00007     |Humphrey Appleby| UK      | London      |   56    |3000       |[email protected]    |
|00008     |Jim Hacker      | UK      | London      |   60    |0          |null            |
|00009     |Thomas Muller   | Germany | Munich      |   34    |2500       |[email protected]|
|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值处理策略,以确保数据库中的数据质量和完整性。

标签:null,处理,com,NULL,SQL,Null,数据,软件测试
From: https://blog.51cto.com/u_15640304/6941507

相关文章

  • 软件测试 | Java程序的注释
    在任何编程语言之中,都存在注释,注释的主要功能是让其他用户可以方便地阅读每段程序,提高程序的可读性,还可以通过注释屏蔽掉一些暂时不用的语句,等需要时直接取消此语句的注释即可,在Java中根据功能的不同,注释主要分为单行注释、多行注释、文档注释3种,下面分别进行介绍。单行注释,就是在......
  • 软件测试 | 一个简单的Java范例
    下面给出一个简单的Java程序范例,观察Java成都基本结构及相同点。范例:定义一个简单类publicclassTestJava{publicstaticvoidmain(String[]args){//Java操作的一个简单范例,输出和乘方intnum=10;......
  • openGauss学习笔记-28 openGauss 高级数据管理-NULL值
    openGauss学习笔记-28openGauss高级数据管理-NULL值NULL值代表未知数据。无法比较NULL和0,因为它们是不等价的。创建表时,可以指定列可以存放或者不能存放NULL值,详情请参见NOTNULL约束。本节介绍ISNULL和ISNOTNULL操作符。创建表customer_t1,数据如下:openGauss=#SELECT*F......
  • 软件测试 | Windows平台下配置MySQL
    对于noinstall方式安装的MySQL,系统的参数配置、服务的启动关闭都需要手工在命令窗口中进行设置。参数文件可以在多个位置进行设置,这里用一个c:\my.cnf来进行操作,其他更详细的参数位置可以参考第24章中的参数设置方法。对于初学者来说,my.cnf并不知道该怎样配置。MySQL为用......
  • postgresql 配置相关
    配置含义32->192.168.1.1/32表示必须是来自这个IP地址的访问才合法;24->192.168.1.0/24表示只要来自192.168.1.0~192.168.1.255的都合法;16->192.168.0.0/16表示只要来自192.168.0.0~192.168.255.255的都合法;8->192.0.0.0/16表示只要来自192.0.0.0~192.255.......
  • MySQL内存分配详解
    InnoDB存储引擎层基础内存分配如果在编译MySQL的时候不开启FPS的监控,InnoDB对动态内存(heap)的分配和释放使用基础的new、delete、malloc、free等。默认InnoDB对内存的分配和回收会添加FPS的监控模块。InnoDB对动态内存(heap)的分配和回收使用封装后的函数,主要在ut_allocator类中实......
  • 软件测试|web自动化测试神器playwright教程(十二)
    前言在日常工作中,我们经常是基于某个测试环境地址去测试某个项目,所以应该把它单独拿出来做为一个全局的配置。其他网址可以使用不同的后缀,只使用相对地址。常见情景比如我们的社区,不同的类别只需要改变我们的后缀即可,如下图:首页地址为:https://ceshiren.com/,我们选择查看热门......
  • 软件测试|web自动化测试神器playwright教程(十三)
    前言我们在工作中,会遇到需要使用不同的硬件设备测试兼容性的问题,尤其是现在手机型号,屏幕大小分辨率五花八门的,我们基本不可能全部机型都用真机测试一遍,playwright提供了模仿机型的功能,我们可以使用playwright来模拟设备。设置手机模式配置需要模拟的设备,我们需要配置我们使用的......
  • SQL - 4
    Smiling&Weeping----走在路上突然心里很难过我不知道为什么难过......
  • 软件测试|web自动化测试神器playwright教程(十四)
    前言我们在日常工作中,经常会遇到下面的情况,我们需要在一个下拉框中选择一个选项:在使用selenium定位的过程中,我们可以选择使用selenium的Select类,有了playwright,我们的操作会变得更简单一些。playwright也提供了select的方法进行操作。select用法使用locator.select_option(......