开启辅助访问
帐号登录 |立即注册

MySql使用union将查询结果进行拼接

 
案例:查询工作岗位是MANAGER和SALESMAN的员工?

不使用union
select ename, job from emp where job = 'MANAGER' or job = ' SALESMAN' ;
select ename, job from emp where job in ( 'MANAGER' , ' SALESMAN') ;

使用union
select ename, job from emp where job = ' MANAGER'
union
select ename, job from emp where job = ' SALESMAN' ;

union的效率要高一些
对于表连接来说,每连接一次新表,则匹配的次数满足笛卡尔积,成倍的翻。
但是union可以减少匹配的次数。在减少匹配次数的情况下,还可以完成两个结果集的拼接。
分析如下:
不使用union
a连接b连接c
a 10条记录
b 10条记录
c 10条记录
匹配次数是: 1000

使用union(将查询结果拼接)
a连接b一个结果:10*10---> 100次
a连接c一个结果: 10*10 --> 100次
使用union的话是: 100次+ 100次= 200次.

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' ;

回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

友情链接
  • 艾Q网

    提供设计文章,教程和分享聚合信息与导航工具,最新音乐,动漫,游戏资讯的网站。