- 联合运算:从两个查询结果中去掉重复值后合并后的结果(重复值仅出现一次),使用UNION操作符
- 全联合运算:与联合运算相似,返回两个查询结果的并集,但包括所有的重复值,使用UNION ALL操作
- 相交运算:返回多个查询的结果中相同的行,使用INTERSECT操作符
- 相减运算:返回在第一个查询中存在而在第二个查询中不存在的行,使用MINUS操作符
--创造一个emp的副本
CREATE TABLE emp_history AS SELECT * FROM emp;
SELECT * FROM emp_history;
--联合运算
--取出emp中部门为20的记录,与emp_history中部门为30的记录进行合并
SELECT empno,ename,sal,hiredate,deptno FROM emp
WHERE deptno=20
UNION
SELECT empno,ename,sal,hiredate,deptno FROM emp_history
WHERE deptno=30
ORDER BY deptno;
--ORDER BY
字句只能放在最后一个select中,放在其他位置会导致失败,如果不放的话默认安装第一列升序排列
--全联合运算
--从emp和emp_history中取出deptno=20的数据,结果会发现每条数据出现了两次
SELECT empno,ename,sal,hiredate,deptno FROM emp
WHERE deptno=20
UNION ALL
SELECT empno,ename,sal,hiredate,deptno FROM emp_history
WHERE deptno=20
ORDER BY empno;
--UNION ALL
不会默认按照第一列升序排列,因此我们加了一个 ORDER BY 语句
--相交运算
--从emp和emp_history中取出deptno=20的数据,结果会发现重复值已经被去掉了
SELECT empno,ename,sal,hiredate,deptno FROM emp
WHERE deptno=20
INTERSECT
SELECT empno,ename,sal,hiredate,deptno FROM emp_history
WHERE deptno=20
ORDER BY empno;
--相减运算
--从emp取出deptno=20的数据减去从emp_history中取出deptno=20的数据,结果会发现为空
SELECT empno,ename,sal,hiredate,deptno FROM emp
WHERE deptno=20
MINUS
SELECT empno,ename,sal,hiredate,deptno FROM emp_history
WHERE deptno=20
ORDER BY empno;