异常的sql server查询结果

can*_*int 10 sql database sql-server sql-server-2008-r2

假设我有一张名为nameAge:

ID  Name  Age
1   X     12
2   Y     12
3   null  null
4   Z     12
Run Code Online (Sandbox Code Playgroud)

当我运行如下查询:

select * from nameAge where Age <> 12
Run Code Online (Sandbox Code Playgroud)

它返回一个空的结果集,而我的行与id 3哪里age不同null

Sql Server 2008 R2.

有任何想法吗?

编辑:与建议答案重复的可能性可能在某一点,但根本没有涵盖,它显示了如何使用空值与null比较,但我想问的是关于包含空值的结果集

ugh*_*hai 16

这是预期的行为.您无法NULL使用=或比较值<>.你必须使用IS NULLIS NOT NULL.

如果你想要NULL值只使用IS NULL:

select * from nameAge where age IS NULL
Run Code Online (Sandbox Code Playgroud)

如果您想要NULL值包含age <> 12值,请使用:

select * from nameAge where age <> 12 OR age IS NULL
Run Code Online (Sandbox Code Playgroud)


Tim*_*sen 8

表达方式

WHERE NULL <> 12
Run Code Online (Sandbox Code Playgroud)

不返回TRUEFALSE,但实际上返回UNKNOWN.这意味着您的查询不会返回表中的第三条记录.

正如@ughai所提到的,您应该使用它IS NULL来查询该记录:

SELECT * FROM nameAge WHERE age IS NULL
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请查看Microsoft SQL Server文档.

  • 根据SQL标准,结果是`UNKNOWN`而不是`NULL`.[tag:mysql]混淆了"NULL"和"UNKNOWN",但大多数其他数据库产品(我都知道)却没有. (2认同)