如果您生成一个查询以在表“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
上面的查询给出了输出----如何??
答案 0 :(得分:11)
NULL
是SQL中的一个特殊值,表示缺少数据。因此,无法执行以下查询:
SELECT fields FROM table WHERE column = NULL
NULL
无法与任何内容进行比较,包括NULL
本身。相反,你需要:
SELECT fields FROM table WHERE column IS NULL
但是,在您的情况下,您实际上是在Sex
和DOB
中插入空值
空值不是NULL
。您必须查询:
SELECT fields FROM table WHERE column = ''
答案 1 :(得分:2)
误解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字段中值的问题的答案取决于您正在使用的字段和数据库引擎的类型。