1.union all只是结果集叠加,union叠加后去重。
2.使用join实现表的关联,笛卡尔积:cross join, 等值连接:inner join, 左连接:left join, 右连接:right join, 全连接:full outer join。
3.使用intersect和in配合也可以实现等值连接,intersect返回两个行来源中的共同行,且不返回重复行。
SELECT empno, ename, job, sal, deptno FROM emp WHERE (ename,job,sal) IN(SELECT ename, job, sal FROM emp INTERSECT SELECT ename, job, sal FROM v);
4.用minus实现结果集相减,基本等价于not in,注意not in不去重且不能处理空值(会返回NULL,因为not in等价于not or,"TRUE OR NULL"结果为TRUE, "FALSE OR NULL"结果为NULL),minus去重且可以空值,解决空值问题可以用not exists.
5.使用反连接(外连接+NULL筛选)来查找与其他表不匹配的记录,示例如下:
SELECT d.* FROM dept d LEFT OUTER JOIN emp e ON (d.deptno=e.deptno)WHERE e.deptno IS NULL
6.使用外连接或标量子查询来向结果中添加列,示例如下:
select e.ename,d.loc,eb.received from emp e join deptno don (e.deptno=d.deptno) left join emp_bonus ebon (e.empno=eb.empno)order by 2等价于select e.ename,d.loc,(select eb.received from emp_bonus ebwhere e.empno=eb.empno) as receivedfrom emp e,deptno dwhere e.deptno=d.deptnoorder by 2
7.找出两个表中不同的数据:
思路:(1)首先找出表EMP中存在而视图V中没有的行;
(2)然后合并在视图V中存在而表EMP中没有的行。
技巧:MINUS+UNION ALL
8.聚集和关联一起使用时,先聚集再关联,或者先去重再关联,避免产生笛卡尔积导致汇总结果不对。
9.full outer join = left outer jion + union + right outer join.