基于以下声明
select null
union
select null
以上语句的输出为:
null
这句话:
select null
union all
select null
输出:
null
null
与null <> null
一样,此处如何处理null值以及将其视为哪种数据类型
答案 0 :(得分:3)
在标准SQL中,UNION
删除重复的记录,UNION ALL
不会删除。令人高兴的是,您的RDBMS足够聪明,可以找出NULL IS NULL
,并且在使用UNION
时可以消除重复的行。
NB:null = null
是unknown
,但是null <> null
也是unknown
。检查无效性的唯一方法是使用类似IS NULL
的东西。
SELECT case when null <> null then 1 else 0 end; --> yields : 0
SELECT case when null = null then 1 else 0 end; --> yields : 0
SELECT case when null IS null then 1 else 0 end; --> yields : 1
答案 1 :(得分:2)
UNION
是集合运算符,涉及检查“重复行”。规范将重复的行定义为“不是唯一的”,并区分为:
如果有两个值,则说两个值不是唯一的:均为空 值,或者根据第8.2节“ <比较 谓词>“。否则它们是不同的。两行(或部分行) 如果它们各自的值对中至少有一个是 不同。否则,它们并没有区别。评价结果 两个值或两行是否不同永远是未知的。
(重点是我的)。因此,在此示例中:
select null
union all
select null
这两行被认为是彼此重复的,因为第一列中的空值被认为是不同的……即相同。根据定义,UNION
仅返回一组重复行中的一行。
答案 2 :(得分:0)
我正在考虑您知道UNION(重复数据删除)和UNION ALL之间的区别
select 'x' from dual where null is null \\results with x
在这种情况下,null实际上是null。这意味着联合会返回正确的结果(重复数据删除)