如果比较列为NULL,则查询不返回结果

时间:2015-04-16 07:08:27

标签: oracle11g null comparison

假设我在Oracle 11g数据库中有以下表(t1),其中包含一些示例数据:

   LastName    |   MiddleName    |    FirstName    

   Spencer           Davids           Mark
   Zola              *NULL*           Francesca
   Myers             Christian        Frank
   Bugatti           *NULL*           Ziona

当我运行以下查询时,我希望获得所有4行:

SELECT * FROM T1 WHERE MiddleName<>'Mikola';

但我只得到2条记录。未检索MiddleName为null的那些。所以比较Null和&#39; Mikola&#39;不像我期望的那样工作。 Null确实不等于&#39; Mikola&#39;,那么问题是什么。作为一种解决方法,我这样做:

SELECT * FROM T1 WHERE MiddleName<>'Mikola' or MiddleName is NUll;

我以前不记得面对这个问题。这是11g的新行为还是一直如此?

2 个答案:

答案 0 :(得分:1)

此行为发生得更早(不知道是否总是如此)。请参阅说明:http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements005.htm

您可以尝试:SELECT * FROM T1 WHERE NVL(MiddleName,&#39; NULL&#39;)&lt;&gt;&#39; Mikola&#39;;

答案 1 :(得分:1)

你可以试试这个:

SELECT * FROM T1 WHERE MiddleName not in ('Mikola');