您的位置:首页 > 数据库 > Oracle

Oracle_集合运算查询

2013-07-16 16:44 411 查看
一:并集(union/union all)

查询10和20号部门的员工

 方法1. select * from emp where deptno in (10,20);

 方法2. select * from emp where deptno=10 or deptno=20;

 方法3. 集合运算

        select * from emp where deptno=10

          union

        select * from emp where deptno=20;

利用集合运算实现group by的增强

SQL> select deptno,job,sum(sal) from emp group by deptno,job

  2  union

  3  select deptno,sum(sal) from emp group by deptno

  4  union

  5  select sum(sal) from emp;

结果错误。因为要遵循下面的4点注意

    注意

 1. 参与运算的各个集合必须列数相同 且类型一致

 2. 采用第一个集合的表头作为最后的表头

 3. 如果排序,必须在每个集合后使用相同的order by

 4. 可以使用括号

    select deptno,job,sum(sal) from emp group by deptno,job

    union

    select deptno,to_char(null),sum(sal) from emp group by deptno

    union

    select to_number(null),to_char(null),sum(sal) from emp;

在第二行和第三行分别补上to_char(null),to_number(null)

来保证:参与运算的各个集合列数相同 类型一致

SQL> break on deptno skip 2

SQL> select deptno,job,sum(sal) from emp group by deptno,job

  2  union

  3  select deptno,to_char(null),sum(sal) from emp group by deptno

  4  union

  5  select to_number(null),to_char(null),sum(sal) from emp;

SQL> break on null

SQL> select deptno,job,sum(sal) from emp group by rollup(deptno,job);

--打开sql执行时间-------重点记住:用于查看sql语句性能对比

SQL> set timing on

SQL> select deptno,job,sum(sal) from emp group by rollup(deptno,job);

 已用时间:  00: 00: 00.00

SQL> select deptno,job,sum(sal) from emp group by deptno,job

  2  union

  3  select deptno,to_char(null),sum(sal) from emp group by deptno

  4  union

  5  select to_number(null),to_char(null),sum(sal) from emp;

 已用时间:  00: 00: 00.01

-----可以看出第一句比第二句的集合运算性能要好

SQL> set timing off--------关闭时间

二:交集(INTERSECT)

SQL> select ename,sal from emp

  2  where sal between 700 and 1300

  3  INTERSECT

  4  select ename,sal from emp

  5  where sal between 1201 and 1400;                                             

三:差集(MINUS)

SQL> select ename,sal from emp

  2  where sal between 700 and 1300

  3  minus

  4  select ename,sal from emp

  5  where sal between 1201 and 1400;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Oracle
相关文章推荐