纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

SQL 中的 NULL值 在 SQL 语句中处理 NULL 值的方法

Java技术栈   2021-06-07 我要评论
想了解在 SQL 语句中处理 NULL 值的方法的相关内容吗Java技术栈在本文为您仔细讲解SQL 中的 NULL值的相关知识和一些Code实例欢迎阅读和指正我们先划重点:SQL,中的,NULL值,SQL,,NULL值下面大家一起来学习吧

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

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

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

是这样:

SELECT * FROM TABLE WHERE USER_AGE = NULL

还是这样?

SELECT * FROM TABLE WHERE USER_AGE IS NULL

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

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

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

WHERE USER_AGE = 1

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

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

NULL = 未知

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

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

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

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

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 值了


相关文章

猜您喜欢

  • Python 内存映射文件操作 Python使用mmap实现内存映射文件操作

    想了解Python使用mmap实现内存映射文件操作的相关内容吗一天一篇Python库在本文为您仔细讲解Python 内存映射文件操作的相关知识和一些Code实例欢迎阅读和指正我们先划重点:Python,内存映射文件操作,Python,内存映射下面大家一起来学习吧..
  • goland调试远程代码 使用goland调试远程代码的操作步骤

    想了解使用goland调试远程代码的操作步骤的相关内容吗janbar在本文为您仔细讲解goland调试远程代码的相关知识和一些Code实例欢迎阅读和指正我们先划重点:goland调试远程,goland远程代码下面大家一起来学习吧..

网友评论

Copyright 2020 www.fresh-weather.com 【世纪下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式