Daa*_*aan 6 mysql sql string null
这可能是一个愚蠢的问题,但null似乎既不等于也不等于任何空字符串"".
我有一个包含以下值的表:
id field1 field2 field3
1 a b c
2 null b c
3 b c
4 a b c
Run Code Online (Sandbox Code Playgroud)
我的查询
select * from table where field1 = ""
Run Code Online (Sandbox Code Playgroud)
不返回第2行,其中field1的值为null.这绝对有意义,因为null不等于空字符串.
但,
select * from table where field1 != ""
Run Code Online (Sandbox Code Playgroud)
也不会返回第2行.
有没有人对此的历史渊源有解释?是因为值null意味着我们不知道该值,因此不知道field1是否等于或不等于第2行的空字符串?
NULL不等于空.NULL不等于任何东西,包括NULL.要比较NULL你需要使用IS NULL或IS NOT NULL
SELECT NULL = NULL,
NULL != NULL,
NULL IS NULL,
NULL IS NOT NULL
NULL = NULL NULL != NULL NULL IS NULL NULL IS NOT NULL
(null) (null) 1 0
Run Code Online (Sandbox Code Playgroud)
select * from table where field1 IS NULL
Run Code Online (Sandbox Code Playgroud)
要么
select * from table where field1 IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
是否因为值 null 意味着我们不知道该值,因此不知道 field1 是否等于或不等于第 2 行的空字符串?
你是对的。每当您进行比较时NULL,结果都是NULL。
您可以将其视为NULL“未知”的意思。当NULL记录存储在列中时,并不意味着它没有值,而是意味着它尚未输入数据库中。
例如,您可能有一个“人员”记录,其中包含“出生日期”列。如果值为NULL,并不意味着该人没有出生。这只是意味着尚未输入,因此,根据数据库,该人的出生日期是“未知”。
如果您不知道此人的出生日期,则无法回答以下任一问题:
这个人是4月1日出生的吗?
这个人不是4月1日出生的吗?
两者的答案都是“未知”。
你也无法回答:
这个人是4月1日之后出生的吗?
这个人不是4月1日之前出生的吗?
每当您将已知值与“未知”进行比较时,答案将是“未知”。
此外,如果两个人的出生日期均为NULL或“未知”,您也无法回答以下问题:
两个人是同一天出生的吗?
两个人不是同一天出生的吗?
第一个人是在第二个人之后出生的吗?
第二个人是在第一个人之后出生的吗?
每当您将一个“未知”值与另一个“未知”值进行比较时,答案都是“未知”。
将任何内容与“未知”值进行比较都会产生“未知”。
但是,您始终可以回答以下问题:
我知道此人的出生日期吗?
我不知道这个人的出生日期吗?
要在 MySQL 中提出这个问题,您可以使用IS NOT NULL和IS NULL。