Oracle查询优化改写_3

对应的第三章”操作多个表“


1.UNION ALL与空字符串

UNION ALL 常常用来合并多个结果集。

select ename AS 名称 from emp where empno = 7788 
UNION ALL
select null AS 名称 from dual
UNION ALL 
select '' AS 名称 from dual;

得到的结果如下:

名称
SCOTT
null
null

可以看到,当一个数据集列不够时,可以用null来填充该列的值,而空字符串在Oracle中常常也相当于null;

为什么不说空字符串等于null呢?看下面的示例:

select sal AS 工资 from emp where empno = 7788
UNION ALL 
select '' AS 工资 from dual;

--报错:表达式必须具有与对应表达式相同的数据类型【sal类型:"NUMBER" ,''类型:"varchar2"】

可以看到,空字符串本身是 varchar2类型,这区别于null可以是任何类型,因此,它们是不等价的。

2.UNION和OR
UNION ALL和UNION的区别
1. UNION ALL合并结果集的时候,数据可能会重复。
2. UNION 合并结果集的时候,会对数据进行去重操作。

在使用UNION和OR时,要特别注意,防止由于去重导致查询结果错误。

SQL1:
select empno,deptno from emp where mgr = 7698 order by 1;

SQL2:
select empno,deptno from emp where job = 'SALESMAN' order by 1;

两个sql得到的结果如下:

SQL1:

empno deptno
7944 30
7521 30
7654 30
7844
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值