查询 returns 如果比较列为 NULL,则无结果

Query returns no result if compared column is NULL

假设我在 Oracle 11g 数据库中有以下 table (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 和 'Mikola' 并不像我期望的那样有效。 Null 确实不等于 'Mikola',所以有什么问题。作为解决方法,我这样做:

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

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

此行为较早发生(不知道是否一直如此)。见解释:http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements005.htm

你可以试试这个:SELECT * FROM T1 WHERE NVL(MiddleName, 'NULL') <>'Mikola';

你可以试试这个:

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