2014-02-15 130 views
2

我具有以下表(Table_1) '<>':在SQL服务器SQL服务器不返回NULL值的行

Table 1

,做出如下在表中的值。

enter image description here

我使用下面的查询来获取不具有“Thakker”作为LastName记录。

SELECT [id] 
     ,[FirstName] 
     ,[LastName] 
    FROM [dbo].[Table_1] WHERE LastName <> 'Thakker' 

但它只返回我只有第三行。我期待它应该返回第二行&第三行。

为什么它不返回第二行。 ?

+0

*为什么它不返回第二行。 ?* http://en.wikipedia.org/wiki/Three-valued_logic –

回答

3

您可以使用此查询。

SELECT [id], 
     [FirstName], 
     [LastName], 
    FROM [dbo].[Table_1] WHERE LastName <> 'Thakker' OR LastName IS NULL 

根据您的问题<>操作不返回NULL值的行因为 <>符不与两个值进行比较,以便进行比较应该有两个值,但

NULL不是一个值。它只是一个显示没有价值的占位符。即使NULL也不等于NULL。这就是为什么在这种情况下,SQL有IS NULLIS NOT NULL

4

请添加ISNULL检查列LastName以在select中包含NULL值。

SELECT [id] 
     ,[FirstName] 
     ,[LastName] 
FROM [dbo].[Table_1] 
WHERE ISNULL(LastName,'') <> 'Thakker' 

或使用CASE

SELECT [id] 
     ,[FirstName] 
     ,[LastName] 
FROM [dbo].[Table_1] 
WHERE 1=CASE WHEN LastName='Thakker' THEN 0 ELSE 1 END 
+0

是否有任何其他方式,没有检查ISNULL每行的姓氏我也可以得到空值行? –

+0

@JigneshThakker如何使用case语句,请检查编辑后的答案。 – TechDo

+1

'ISNULL'如何与索引一起工作?我会说你的第一个解决方案会阻止索引使用... –