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在使用的时候的注意事项:

  1. union在进行结果集合并的时候,要求两个结果集的列数相同。
select ename,job from emp where job = 'MANAGER'
union
select ename from emp where job = 'SALESMAN';

  例如上述所示的语句会报错。

  1. mysql可以,oracle语法严格 ,不可以,报错。要求:结果集合并时列和列的数据类型也要一致。
select ename,job from emp where job = 'MANAGER'
union
select ename,sal from emp where job = 'SALESMAN';

以上是关于MySQL—— union的主要内容,如果未能解决你的问题,请参考以下文章

臃肿的 UNION ALL 代码 (MYSQL)

在这种情况下如何使用 UNION (MySQL) [重复]

mysql中 union是什么鬼

在 mysql 中,NOT EXISTS 函数的性能成本是不是比 UNION 高得多?

Mysql union all select问题

mysql中的union用法