对应的第三章”操作多个表“
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 |