WHERE子句可以返回NULL而不是TRUE或FALSE吗? 根据下面的练习,它是可能的,但我无法想象一个返回NULL的例子,它真的可能吗?
4. Which of the following values can NOT be returned after evaluation of WHERE clause
condition?
A. UNKNOWN
B. TRUE
C. FALSE
D. NULL
Answer: A. If the result of the condition in WHERE clause is not known, NULL is returned. In all
other scenarios, either TRUE or FALSE is returned.
答案 0 :(得分:2)
在SQL中,MySQL UNKNOWN结果中的所有逻辑运算符求值为TRUE,FALSE和UNKNOWN(Oracle docs)为NULL(MySQL docs)。
根据oracle文档:
"要测试空值,请仅使用IS NULL和IS的比较条件 不是NULL。如果您使用任何其他条件的空值和结果 取决于null的值,然后结果是UNKNOWN。"
因此,评估后只能返回TRUE,FALSE和UNKNOWN。
关于您的问题:
" WHERE子句可以返回NULL而不是TRUE或FALSE吗?"
严格地说在Oracle中 - NO 因为这样的结果叫做UNKNOWN。
但总的来说,UNKNOWN和NULL的含义在这个上下文中是等价的,它只是同一个东西的不同名称。
所以下面的SQL示例(a.a >= all
)评估为UNKNOWN。
with table_a as (
select null as a from dual
union all
select 10 as a from dual
union all
select 5 as a from dual),
table_b as (
select null as a from dual
union all
select 10 as a from dual
union all
select 5 as a from dual)
select * from table_a a where a.a >= all(select a from table_b b)
答案 1 :(得分:0)
为了解释原因,请考虑SQL语言使用三值逻辑:TRUE
,FALSE
和NULL
。我们来考虑一下这个Orders表,
如果我们运行以下查询,它将不会返回CPU和Monitor
的行SELECT * FROM Orders WHERE (qty < 1000 Or qty >= 1000)
在这种情况下,对于CPU和监视器条件,(qty < 1000 Or qty >= 1000)
既不返回TRUE
也不返回FALSE
。它返回NULL
。因为逻辑上它是未知的。因此,WHERE
子句中的条件结果是未知的,并返回NULL。
您可以考虑这个reference。
答案 2 :(得分:0)
即使NULL也不能等于NULL。
非技术方面
如果你问两个女孩,她们多大了?也许你会听到他们 拒绝回答你的问题,两个女孩都给你NULL作为年龄 这并不意味着两者都有相似的年龄。所以没有什么可以 等于null。
SELECT 0 IS NULL , 0 IS NOT NULL , '' IS NULL , '' IS NOT NULL, NULL != NULL, NULL = NULL, NULL != '', NULL = ''