2014-02-15 131 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'如何與索引一起工作?我會說你的第一個解決方案會阻止索引使用... –