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处理空值的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!

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