Oracle null值

时间:2013-01-11 21:12:48

标签: sql oracle

有人可以在oracle db中解释下面查询的功能吗?为什么不返回最后一个空行。还请在空值的情况下解释我的功能。

Table Store_Information
store_name    Sales  Date
Los Angeles   $1500  Jan-05-1999
San Diego      $250  Jan-07-1999
San Francisco  $300  Jan-08-1999
Boston         $700  Jan-08-1999
(null)         $600  Jan-10-1999


SELECT *
FROM scott.Store_Information
WHERE store_name IN (null)

STORE_NAME           SALES                DATE                      
-------------------- -------------------- ------------------------- 

0 rows selected

5 个答案:

答案 0 :(得分:6)

SELECT *
FROM scott.Store_Information
WHERE store_name IS null;

NULL不能与其他(实际)值“比较”。因此,您必须使用IS NULLIS NOT NULL

以下是有关此主题的一系列博文:http://momjian.us/main/blogs/pgblog/2012.html#December_26_2012

答案 1 :(得分:1)

如果您要查找的值为空值,则查询应为:

SELECT *
FROM scott.Store_Information
WHERE store_name IS NULL;

答案 2 :(得分:0)

Oracle NULLS是special

  

没有什么等于null
  没有什么不等于null

由于in相当于= any,因此这也适用于in

因此,您不能在innot in子句中使用NULL并期望得到正确的结果。

答案 3 :(得分:0)

Null是一个特殊值,不遵循字符串或数字比较的常规约定。除非使用一些特殊的内置函数,否则使用这些常用方法计算null将始终求值为FALSE。

Select * from Store_Information
where nvl(store_name,'') in ('')

Select * from store_information
where coalesce(store_name, 'Missing') in ('Missing')

Select * from store_information 
where store_name is null

答案 4 :(得分:0)

如果您希望查询选择具有空值的字段,您可以: 解决方案1: 使用where ... IS NULL ...

解决方案2: 或者如果你想绝对使用IN,你可以使用NVL 例如:

SELECT * 来自scott.Store_Information 哪里有NVL(store_name,'NULL_STORE_NAME')IN('NULL_STORE_NAME')

但在第二种情况下,您假设您不能拥有名为“NULL_STORE_NAME”的商店名称......所以通常最好在我看来使用解决方案1 ​​...