广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >在SQL中该如何处理NULL值
  • 589
分享到

在SQL中该如何处理NULL值

2024-04-02 19:04:59 589人浏览 独家记忆
摘要

在日常使用数据库时,你在意过NULL值么? 其实,NULL值在数据库中是一个很特殊且有趣的存在,下面我们一起来看看吧; 小伙伴想精准查找自己想看的MySQL文章?喏 → M

在日常使用数据库时,你在意过NULL值么?

其实,NULL值在数据库中是一个很特殊且有趣的存在,下面我们一起来看看吧;

小伙伴想精准查找自己想看的MySQL文章?喏 → MySQL专栏目录 | 点击这里

在查询数据库时,如果你想知道一个列(例如:用户注册年限 USER_AGE)是否为 NULL,sql 查询语句该怎么写呢?

是这样:


SELECT * FROM TABLE WHERE USER_AGE = NULL

还是这样?


SELECT * FROM TABLE WHERE USER_AGE IS NULL

当然,正确的写法应该是第二种(WHERE USER_AGE IS NULL)。

但为什么要这样写呢?在进行数据库数据比较操作时,我们不会使用“IS”关键词,不是吗?

 

一脸懵逼

例如,如果我们想要知道一个列的值是否等于 1,WHERE 语句是这样的:


WHERE USER_AGE = 1

那为什么 NULL 值要用 IS 关键字呢?为什么要以这种方式来处理 NULL?

因为,在 SQL 中,NULL 表示“未知”。也就是说,NULL 值表示的是“未知”的值。

NULL = 未知;

在大多数数据库中,NULl 和空字符串是有区别的。

但并不是所有数据库都这样,例如,oracle 就不支持空字符串,它会把空字符串自动转成 NULL 值。

在其他大多数数据库里,NULL 值和字符串的处理方式是不一样的:

  • 空字符("")串虽然表示“没有值”,但这个值是已知的。
  • NULL 表示 “未知值”,这个值是未知的。

这就好比我问了一个问题:“川建国的小名叫什么?”

有人会回答说:“我不知道川建国的小名是什么”。对于这种情况,可以在数据库中使用Nickname列来表示川建国的小名,而这一列的值为 NULL。

也有人会回答说:“川建国没有小名。他的父母没有给他取小名,大家虽然一直叫他川二狗,但是我知道川建国确实没有小名”。对于这种情况,Nickname列应该是一个空字符串("")。

Oracle 比较特殊,两个值都使用 NULL 来表示,而其他大多数数据库会区分对待。

但只要记住 NULL 表示的是一个未知的值,那么在写 SQL 查询语句时就会得心应手。

例如,如果你有一个这样的查询语句:


SELECT * FROM SOME_TABLE WHERE 1 = 1

这个查询会返回所有的行(假设 SOME_TABLE 不是空表),因为表达式“1=1”一定为 true。

如果我这样写:


SELECT * FROM SOME_TABLE WHERE 1 = 0

表达式“1=0”是 false,这个查询语句不会返回任何数据。

但如果我写成这样:


SELECT * FROM SOME_TABLE WHERE 1 = NULL

这个时候,数据库不知道这两个值(1 和 NULL)是否相等,因此会认定为“NULL”或“未知”,所以它也不会返回任何数据。

  三元逻辑

SQL 查询语句中的 WHERE 一般会有三种结果:

  • 它可以是 true(这个时候会返回数据);
  • 它可以是 false(这个时候不会返回数据);
  • 它也可以是 NULL 或未知(这个时候也不会返回数据);

你可能会想:“既然这样,那我为什么要去关心是 false 还是 NULL?它们不是都不会返回数据吗?”

接下来,我来告诉你在哪些情况下会有问题:我们来看看 NOT( ) 方法。

假设有这样的一个查询语句:


SELECT * FROM SOME_TABLE WHERE NOT(1 = 1)

数据库首先会计算 1=1,这个显然是 true。

接着,数据库会应用 NOT() 条件,所以 WHERE 返回 false。

所以,上面的查询不会返回任何数据。

但如果把语句改成这样:


SELECT * FROM SOME_TABLE WHERE NOT(1 = 0)


数据库首先会计算 1=0,这个肯定是 false。

接着,数据库应用 NOT() 条件,这样就得到相反的结果,变成了 true。

所以,这个语句会返回数据。

但如果把语句再改成下面这样呢?


SELECT * FROM SOME_TABLE WHERE NOT(1 = NULL)

数据库首先计算 1=NULL,它不知道 1 是否等于 NULL,因为它不知道 NULL 的值是什么。

所以,这个计算不会返回 true,也不会返回 false,它会返回一个 NULL。

接下来,NOT() 会继续解析上一个计算返回的结果。

当 NOT() 遇到 NULL,它会生成另一个 NULL。未知的相反面是另一个未知。

所以,对于这两个查询:


SELECT * FROM SOME_TABLE WHERE NOT(1 = NULL)
SELECT * FROM SOME_TABLE WHERE 1 = NULL

都不会返回数据,尽管它们是完全相反的。

NULL 和 NOT IN
如果我有这样的一个查询语句:


SELECT * FROM TABLE WHERE 1 IN (1, 2, 3, 4, NULL)

很显然,WHERE 返回 true,这个语句将返回数据,因为 1 在括号列表里是存在的。

但如果这么写:


SELECT * FROM SOME_TABLE WHERE 1 NOT IN (1, 2, 3, 4, NULL)

很显然,WHERE 返回 false,这个查询不会返回数据,因为 1 在括号列表里存在,但我们说的是“NOT IN”。

但如果我们把语句改成这样呢?


SELECT * FROM SOME_TABLE WHERE 5 NOT IN (1, 2, 3, 4, NULL)

这里的 WHERE 不会返回数据,因为它的结果不是 true。数字 5 在括号列表里可能不存在,也可能存在,因为当中有一个 NULL 值(数据库不知道 NULL 的值是什么)。

这个 WHERE 会返回 NULL,所以整个查询不会返回任何数据。

希望大家现在都清楚该怎么在 SQL 语句中处理 NULL 值了。更多相关SQL处理NULL值内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 在SQL中该如何处理NULL值

本文链接: https://www.lsjlt.com/news/126501.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 在SQL中该如何处理NULL值
    在日常使用数据库时,你在意过NULL值么? 其实,NULL值在数据库中是一个很特殊且有趣的存在,下面我们一起来看看吧; 小伙伴想精准查找自己想看的MySQL文章?喏 → M...
    99+
    2022-11-12
  • 在 SQL 语句中处理 NULL 值的方法
    在日常使用数据库时,你在意过NULL值么? 其实,NULL值在数据库中是一个很特殊且有趣的存在,下面我们一起来看看吧; 在查询数据库时,如果你想知道一个列(例如:用户注册年限 USE...
    99+
    2022-11-12
  • MySQL数据表字段值为NULL应该如何处理
    不知道大家之前对类似MySQL数据表字段值为NULL应该如何处理的文章有无了解,今天我在这里给大家再简单的讲讲。感兴趣的话就一起来看看正文部分吧,相信看完MySQL数据表字段值为NULL应该如何处理你一定会...
    99+
    2022-10-18
  • 如何在Asp.Net Core MVC中处理null值的实现
    译文链接:https://www.infoworld.com/article/3434624/how-to-handle-null-values-in-aspnet-core-...
    99+
    2022-06-07
    ASP.NET core null MVC ASP net
  • Kotlin语言中是如何处理null值的
    Kotlin语言中是如何处理null值的?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Kotlin null的处理详解NullPointerException,...
    99+
    2023-05-31
    kotlin null
  • sql 处理数据字段为NULL 若不为空则显示该值,若为空转换成别的值。
    第一种方法: 判断字段是否为空,如果为空转成你要的字符 1.oracle : nvl(“字段名”,’转换后的值’);//字段名是双引号,转换后的值是单引号 2.sql Server: isnull(“字段名”,’转换后的值’)//...
    99+
    2020-08-02
    sql 处理数据字段为NULL 若不为空则显示该值,若为空转换成别的值。
  • 如何在es中查询null值
    文章目录 1、背景2、需求3、准备数据3.1 创建mapping3.2 插入数据 4、查询 `name`字段为null的数据5、查询`address`不存在或值直接为null的数据6、参考...
    99+
    2023-09-16
    elasticsearch java null值查询 es bool exists
  • 如何在mybatisPlus中更新null 值
    如何在mybatisPlus中更新null 值?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。发现mybatisPlus会更新对象属性为null的值,与field-strat...
    99+
    2023-06-06
  • springboot中如何利用fastjson处理返回值为null的属性值
    本篇内容主要讲解“springboot中如何利用fastjson处理返回值为null的属性值”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“springboot中如何利用fastjson处理返回值...
    99+
    2023-06-08
  • 在Java中如何处理数组中的空值?
    在Java中,数组是一种常见的数据类型,它可以存储一组相同类型的数据。但是,在实际开发中,我们经常会遇到数组中存在空值的情况。这时,我们需要对数组中的空值进行处理,以确保程序的正确性和稳定性。 本文将介绍在Java中如何处理数组中的空值,包...
    99+
    2023-09-30
    数组 bash windows
  • 如何使用 MySQL COALESCE() 函数在列中的 NULL 位置插入值?
    为了理解它,我们使用表“Employee”中的数据,其中 ID = 5 和 6 的 Salary=NULL,如下 -mysql> Select * from Employee; +----+--------+--------...
    99+
    2023-10-22
  • 如何在PHP中处理数组值的唯一性
    在Web开发中,数据库和数组是两个常用的数据存储和处理方式。通常情况下,开发人员会使用PHP联合MySQL从数据库中读取数据,并存储在一个数组里进行处理。但是,有时候我们需要确保数组里的值不重复,才能达到我们需要的目的。那么,本文就来介绍如...
    99+
    2023-05-14
  • Java中的InstantiationException异常该如何处理
    在Java中,InstantiationException异常通常会在使用反射创建实例时抛出,当无法创建一个类的实例时会抛出该异常。...
    99+
    2023-08-24
    java
  • 在SQL Server中如何使用Try Catch处理异常
    今天小编给大家分享一下在SQL Server中如何使用Try Catch处理异常的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面...
    99+
    2023-07-02
  • JavaScript中值为undefined如何处理
    JavaScript中值为undefined如何处理,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。而在JavaScript里,当你要获取一个变...
    99+
    2022-10-19
  • 如何在Python中处理多维数组中的缺失值?
    在Python中,多维数组是一种常见的数据结构。然而,多维数组中存在的缺失值可能会影响数据的分析和处理。因此,处理多维数组中的缺失值是数据分析的一个重要步骤。本文将介绍如何在Python中处理多维数组中的缺失值。 一、什么是缺失值 缺失值是...
    99+
    2023-09-11
    二维码 大数据 数组
  • 如何解决SpringBoot返回结果如果为null或空值不显示处理问题
    这篇文章主要介绍如何解决SpringBoot返回结果如果为null或空值不显示处理问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!SpringBoot返回结果如果为null或空值不显示处理第一种方法:自定义消息转换...
    99+
    2023-06-20
  • 如何在Java中使用Numpy来处理数值计算?
    Java是一门广泛使用的编程语言,在数值计算方面,Java本身的数值计算库已经相当强大,但是在一些特定的数值计算场景中,需要使用专业的数值计算库来进行更加高效的计算。其中,Numpy是一款专门用于数值计算的Python库,它提供了一系列高效...
    99+
    2023-06-14
    http numpy 索引
  • Pandas如何处理DataFrame中的inf值
    目录如何处理DataFrame的inf值DataFrame有关inf的处理技巧什么是inf?为什么会产生?产生inf有什么好处?产生inf有什么坏处?怎么处理?怎么获取到inf的所在...
    99+
    2022-11-11
  • 如何处理JavaScript 中的货币值?
    金钱无处不在。       无论在银行应用程序、电子商务网站还是证券交易所平台,我们每天都在与金钱互动。我们也越来越依赖技术来处理问题。       然而,关于...
    99+
    2023-06-03
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作