有人可以在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
答案 0 :(得分:6)
SELECT *
FROM scott.Store_Information
WHERE store_name IS null;
NULL不能与其他(实际)值“比较”。因此,您必须使用IS NULL
或IS 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
。
因此,您不能在in
或not 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 ...