sql语句中null用法,sql null=null,在SQL中该如何处理NULL值

sql语句中null用法,sql null=null,在SQL中该如何处理NULL值

在数据库的日常使用中,空值是数据库中一个非常特殊而有趣的存在。本文介绍了SQL中如何处理空值,有兴趣的可以看看。

在数据库的日常使用中,你在乎空值吗?

实际上,空值是数据库中一个非常特殊和有趣的存在。让我们一起来看看吧。

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

查询数据库时,如果想知道某一列(例如用户注册年份USER_AGE)是否为空,如何写SQL查询语句?

是这样的:

TABLE WHERE USER _ AGE=NULL的表

还这样?

SELECT * FROM USER _ AGE为空的表

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

但是为什么要这样写呢?我们不会在比较数据库数据时使用“IS”关键字吧?

完全糊涂了

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

其中用户年龄=1

那么为什么对空值使用IS关键字呢?为什么要这样处理NULL?

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

NULL=未知;

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

但是并不是所有的数据库都是这样的。例如,Oracle不支持空字符串,它会自动将空字符串转换为空值。

在大多数其他数据库中,空值和字符串的处理方式不同:

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

NULL表示“未知值”。该值未知。

就像我问了一个问题:“川建国的外号是什么?”

有人会回答“我不知道川建国的外号是什么”。在这种情况下,可以使用Nickname列来表示川建国在数据库中的昵称,该列的值为NULL。

还有人会回复,“川建国没有外号。他的父母没有给他起绰号。虽然大家一直叫他川二狗,但我知道川建国并没有外号”。在这种情况下,列Nickname应该是空字符串(“”)。

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

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

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

SELECT * FROM SOME_TABLE其中1=1

该查询将返回所有行(假设SOME_TABLE不是空表),因为表达式“1=1”必须为真。

如果我这样写:

SELECT * FROM SOME_TABLE其中1=0

表达式“1=0”为假,此查询语句不会返回任何数据。

但是如果我这样写:

SELECT * FROM SOME_TABLE,其中1=NULL

此时数据库不知道这两个值(1和NULL)是否相等,所以会被视为“NULL”或“unknown”,所以也不会返回任何数据。

三元逻辑

在SQL查询语句中WHERE一般有三个结果:

可以是真的(此时会返回数据);

可以是假的(此时不会返回任何数据);

也可以为空或未知(此时不会返回任何数据);

你可能会想,“在这种情况下,我为什么要关心它是假的还是空的呢?不都是返回数据吗?”

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

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

SELECT * FROM SOME _ TABLE WHERE NOT(1=1)

首先,数据库会计算出1=1,这显然是对的。

接下来,数据库应用NOT()条件,因此WHERE返回false。

因此,上述查询不会返回任何数据。

但是如果你把陈述改成这样:

SELECT * FROM SOME _ TABLE WHERE NOT(1=0)

首先,数据库会计算出1=0,这一定是假的。

然后,数据库应用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,其中1=NULL

不会返回数据,虽然两者完全相反。

空且不在

如果我有这样一个查询语句:

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存在于括号列表中,但我们说的是“不在”。

但是如果我们把陈述改成这样呢?

SELECT * FROM SOME _ TABLE WHERE 5 NOT IN(1,2,3,4,NULL)

其中这里不返回数据,因为它的结果不为真。数字5可能不存在,也可能在括号列表中存在,因为里面有空值(数据库不知道空值是什么)。

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

我希望现在每个人都知道如何处理SQL语句中的空值。有关SQL处理空值的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 使用sql语句实现查询排序,顺序和倒序的区别,sql按倒序排序
  • 使用sql语句实现查询排序,顺序和倒序的区别,sql按倒序排序,使用SQL语句实现查询排序,顺序和倒序
  • 使用php连接mysql数据库,php连接数据库的方法
  • 使用php连接mysql数据库,php连接数据库的方法,一文详解PHP连接MySQL数据库的三种方式
  • 一篇文章带你入门sql编程语句,一篇文章带你入门sql编程题
  • 一篇文章带你入门sql编程语句,一篇文章带你入门sql编程题,一篇文章带你入门SQL编程
  • window无法启动mysql 1067,windows无法启动mysql57服务,错误1053
  • window无法启动mysql 1067,windows无法启动mysql57服务,错误1053,windows无法启动MySQL服务报错1067的解决方法
  • vb中adodb连接数据库,,VB语言使用ADO连接、操作SQLServer数据库教程
  • sql重复记录查询的几种方法有哪些,查询重复记录sql语句
  • sql重复记录查询的几种方法有哪些,查询重复记录sql语句,SQL重复记录查询的几种方法
  • sql语句的各个关键字的解析过程详细总结怎么写,sql语句的各个关键字的解析过程详细总结图
  • sql语句的各个关键字的解析过程详细总结怎么写,sql语句的各个关键字的解析过程详细总结图,SQL语句的各个关键字的解析过程详细总结
  • sql语句游标,sqlserver游标的使用
  • sql语句游标,sqlserver游标的使用,详解SQL游标的用法
  • 留言与评论(共有 条评论)
       
    验证码: