union

4、union合并查询结果集

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

    select ename,job from emp where job = 'MANAGER' or job = 'SALESMAN';

    select ename,job from emp where job in ('MANAGER' , 'SALESMAN');

  用union效率高:对表连接,每连接一次新表,匹配的次数满足笛卡尔积,但是union可以减少匹配的次数,在减少匹配次数的情况下,可以完成两个结果集的拼接。

  select ename,job from emp where job = 'MANAGER'

  union

  select ename,job from emp where job = 'SALESMAN';

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

    2,Mysql可以,但oracle语法严格不行,要求:结果集合并时列和列的数据类型也要一样

    select ename,job from emp where job = 'MANAGER'

    union

    select ename,sal from emp where job = 'SALESMAN';

    

 

posted @ 2022-01-22 21:40  doremi429  阅读(152)  评论(0编辑  收藏  举报