MySQL—— union
Posted 大彤小忆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL—— union相关的知识,希望对你有一定的参考价值。
10. union
union
合并查询结果集。
union
可以合并集合(相加)。
- 查询 job 包含 MANAGER 和包含 SALESMAN 的员工:
select * from emp where job in('MANAGER', 'SALESMAN');
- 查询工作岗位是MANAGER和SALESMAN的员工:
select ename,job from emp where job = 'MANAGER' or job = 'SALESMAN';
或select ename,job from emp where job in('MANAGER','SALESMAN');
select ename,job from emp where job = 'MANAGER'
union
select ename,job from emp where job = 'SALESMAN';
union
的效率要高一些。对于表连接来说,每连接一次新表,则匹配的次数满足笛卡尔积,成倍的翻。但是union
可以减少匹配的次数。在减少匹配次数的情况下,还可以完成两个结果集的拼接。
- a 连接 b 连接 c
a 10条记录
b 10条记录
c 10条记录
匹配次数是:1000 - a 连接 b 一个结果:10 * 10 --> 100次
a 连接 c 一个结果:10 * 10 --> 100次
使用union
的话是:100次 + 100次 = 200次。(union把乘法变成了加法运算)
union
在使用的时候的注意事项:
- union在进行结果集合并的时候,要求两个结果集的列数相同。
select ename,job from emp where job = 'MANAGER'
union
select ename from emp where job = 'SALESMAN';
例如上述所示的语句会报错。
- mysql可以,oracle语法严格 ,不可以,报错。要求:结果集合并时列和列的数据类型也要一致。
select ename,job from emp where job = 'MANAGER'
union
select ename,sal from emp where job = 'SALESMAN';
以上是关于MySQL—— union的主要内容,如果未能解决你的问题,请参考以下文章