SQL> --外连接
SQL> --按部门统计员工人数: 部门号 部门名称 人数
SQL> select d.deptno,d.dname,count(e.empno)
2 from dept d,emp e
3 where d.deptno=e.deptno
4 group by d.deptno,d.dname;---> 结果是不符合要求的
外连接解决的问题:当条件不成立时,任然希望在结果中包含不成立的记录
左外连接: where d.deptno=e.deptno 当不成立时,等号左边代表的表的信息任然被包含
写法: where d.deptno=e.deptno(+)
右外连接: where d.deptno=e.deptno 当不成立时,等号右边代表的表的信息任然被包含
写法:where d.deptno(+)=e.deptno
SQL> 1 select d.deptno,d.dname,count(e.empno)
2 from dept d,emp e
3 where d.deptno=e.deptno(+)
4 group by d.deptno,d.dname
5 order by 1
--自连接:利用表的别名,将同一张表视为多张表 --自连接不太适合操作大表
SQL> --查询员工信息:***的老板是***
SQL> select e.ename||'的老板是'||b.ename
2 from emp e,emp b
3 where e.mgr=b.empno;
SQL> --层次查询---适合操作大表
SQL> --层次查询: 对同一张表的前后两次操作,进行连接
SQL> select level,empno,ename,mgr
2 from emp
3 connect by prior empno=mgr
4 start with mgr is null
5 order by 1;