集合运算就是将多个结果集组合成一个结果集,其包括:
INTERSECT (交集),返回两个查询共有的记录。【A∩B 只取A和B相同的部分,只取一次】
UNION ALL (并集),返回各个查询的所有记录,包括重复记录。【如 A∪+ B 取A和B的所有信息,相同的部分各取一次 】
UNION (并集),返回各个查询的所有记录,不包括重复记录。【如A∪B 取A和B所有的信息,相同的部分只取一次】
MINUS (补集),返回第一个查询检索出的记录减去第二个查询检索出的记录之后剩余的记录。【如A-B 取属于A但不属于B的部分】
当使用集合操作时,需要注意,查询所返回的列数以及列的类型必须匹配,列名可以不同。
一、求补运算
1. 求没有员工的部门,只需要求出dept表中的部门号(全部的部门号)与emp表中的部门号(有员工的部门号)的补集即可,如:
SELECT deptno FROM DEPT MINUS SELECT deptno FROM EMP;
可知,40代表的这个部门没有员工。
二、联合运算(union) 【去重,不排序】
1 select empno,ename,sal,deptno from emp where deptno=20 2 union 3 select empno,ename,sal,deptno from emp where sal>=3000;
三、完全联合运算 【不去重】
1 select empno,ename,sal,deptno from emp where deptno=20 2 union all 3 select empno,ename,sal,deptno from emp where sal>=3000;
四、相交运算 【intersect】
1 select empno,ename,sal,deptno from emp where deptno=20 2 intersect 3 select empno,ename,sal,deptno from emp where sal>=3000;