Oracle——集合运算

集合运算

示例 1:查询10和20号部门的员工

1. select * from emp where deptno=10 or deptno=20;
2. select * from emp where deptno in (10,20);
3. 集合运算
    select * from emp where deptno=10
    union
    select * from emp where deptno=20;

示例2:group by中的rollup函数

  如果是Group by  ROLLUP(A, B, C)的话,首先会对(A、B、C)进行GROUP BY,然后对(A、B)进行GROUP BY,然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作。

      如果是GROUP BY CUBE(A, B, C),则首先会对(A、B、C)进行GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),(C),最后对全表进行GROUP BY操作。

SELECT
	deptno,
	job,
	sum( sal ) 
FROM
	emp 
GROUP BY
	rollup ( deptno, job );
	
-- 相当于

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;

注意的问题:

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

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

3、order by永远在最后

4、括号

SQL优化 4、 尽量不要使用集合运算

猜你喜欢

转载自www.cnblogs.com/x54256/p/9001191.html