'<>'在SQL Server中不返回NULL值行

时间:2014-02-15 07:25:16

标签: sql sql-server tsql

我在SQL server中有以下表(Table_1):

Table 1

表中有以下值。

enter image description here

我正在使用以下查询来获取没有'Thakker'作为LastName的记录。

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

但它只让我回到第三排。我期待它应该让我回到第二个&amp;第三行。

为什么它没有返回第二排。 ?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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的原因。