如何使用AND和OR形成SQL查询?

时间:2013-02-05 16:41:45

标签: sql sql-server-2008 select

我想编写一个查询,返回X列中所有非空单元格,其值不是2,5或8。我这样做了吗?因为我的结果肯定是错误的。

SELECT *
FROM [Example].[dbo].[table]
WHERE X <> '' AND (X <> '2' OR X <> '5' OR X <> '8');  

5 个答案:

答案 0 :(得分:4)

为空,你的意思是NULL没有)和empty string 不等于null所以你应该使用特殊的使用NULL

过滤掉非IS NOT NULL值的条件
WHERE X IS NOT NULL AND 
      X NOT IN('', '2', '5', '8'); 

答案 1 :(得分:2)

SELECT *
FROM [Example].[dbo].[table]
WHERE X <> '' AND  X IS NOT NULL AND X NOT IN ('2','5','8')

答案 2 :(得分:2)

就个人而言,我会将其写成:

SELECT *
FROM [Example].[dbo].[table]
WHERE ISNULL(X,'') <> ''
AND X not in ('2','5','8'); 

答案 3 :(得分:1)

您在此查询中未考虑NULLS。

X IS NOT NULL

我会把你的&#39;&#39;&#39;并且只是做,并且你想要所有那些标准而不是一个或另一个。

答案 4 :(得分:0)

似乎所有其他答案都集中于明确过滤掉NULL,但我想我会指出NULL是一个特例,而NULL NOT IN任何事情都不是真的。这将简化您的查询;

SELECT * FROM myTable WHERE X NOT IN ('', '2','5','8')

这将选择X不是NULL,'2','5','8'或空字符串的所有行。

如果你想要NULL 包含,你必须做一些有点特殊的构造;

SELECT * FROM myTable WHERE X IS NULL OR X NOT IN ('', '2', '5', '8');

An SQLfiddle to test with