为什么column = NULL不返回任何行?

时间:2010-10-07 05:33:01

标签: sql null

  

可能重复:
  Why does NULL = NULL evaluate to false in SQL server

如果您生成一个查询以在表“MyTab”中插入数据列---年龄,性别,DOB,ID

INSERT INTO MyTab 
VALUES (22, '', '', 4)

“性与性”栏目的价值是什么? DOB? 它是NULL吗?

如果value为NULL则为---

 SELECT * FROM MyTab
 WHERE Sex=NULL

上面的查询给出了输出----没有选择行---为什么??

如果value不为NULL则为---

 SELECT * FROM Mytab
 WHERE Sex IS NULL

上面的查询给出了输出----如何??

5 个答案:

答案 0 :(得分:11)

NULL是SQL中的一个特殊值,表示缺少数据。因此,无法执行以下查询:

SELECT fields FROM table WHERE column = NULL

NULL无法与任何内容进行比较,包括NULL本身。相反,你需要:

SELECT fields FROM table WHERE column IS NULL

但是,在您的情况下,您实际上是在SexDOB中插入空值 空值不是NULL。您必须查询:

SELECT fields FROM table WHERE column = ''

答案 1 :(得分:2)

来自Null (SQL)

  

误解Null是如何工作的   造成大量错误的原因   在SQL代码中,都在ISO标准SQL中   语句和特定的SQL   现实支持的方言   数据库管理系统。的这些   错误通常是由于错误造成的   Null与0之间的混淆   (零)或空字符串(字符串   长度为零的值,   在SQL中表示为'')。 Null是   由ISO SQL标准定义为   不同于一个空字符串   然而,数值为0。   虽然Null表示没有   任何值,空字符串和   数字零都代表实际   值。

同样来自SET ANSI_NULLS

  

当SET ANSI_NULLS为OFF时,等于   (=)和不等于(<>)比较   运营商不遵循SQL-92   标准。使用SELECT语句   WHERE column_name = NULL返回   column_name中具有空值的行。   使用WHERE的SELECT语句   column_name<> NULL返回行   列中包含非空值。在   另外,还有一个SELECT语句   WHERE column_name<> XYZ_value返回   所有非XYZ值的行和   不是NULL。

答案 2 :(得分:2)

'' - 它的意思是空字符串。如果要插入NULL,则需要使用

 INSERT INTO MyTab 
          VALUES (22, '', NULL, 4)

答案 3 :(得分:0)

NULL表示没有数据(甚至不是空白或空的东西),所以Column = NULL不起作用,尽管Column IS NULL应该将该列的行返回为NULL。但是你要插入''值,所以与NULL比较不会返回任何行。

答案 4 :(得分:0)

正如其他人所说,第一个查询不返回任何输出,因为您无法使用equals运算符检查NULL。第二个查询更令人费解 - 我唯一的猜测是你使用Oracle将空字符串视为NULL。

关于Sex和DOB字段中值的问题的答案取决于您正在使用的字段和数据库引擎的类型。