insert into a(id,name) values(1,'a1'); insert into a(id,name) values(2,'a2'); insert into a(id,name) values(3,'a3'); insert into b(id,name) values(1,'b1'); insert into b(id,name) values(2,'b2');
----使用LEFT OUTER JOIN...ON...语法------ select e.ename,e.sal,e.deptno,d.dname from emp e left outer join dept d on(e.deptno=d.deptno);
A left outer join B on(...) 以A表记录显示为主,B表记录为补充.当A表记录在B表找不到对等记录时,B以NULL方式补充。
b.右外连接 select e.ename,e.sal,e.deptno,d.dname from emp e right outer join dept d on(e.deptno=d.deptno); 上面语句是以dept表显示为主,emp为补充.如果emp没有对等记录,字段值以NULL补充。
select * from a right outer join b on(a.id=b.id); 等价于 select * from b left outer join a on(a.id=b.id)
----在JOIN...ON之前的外连接写法-------- //(+)所在表为补充表,另一方是主表 select * from a,b where a.id(+)=b.id; //jb为主,ja为补充
c.全外连接 全外连接=左外连接+右外链接-(重复记录) select * from a full outer join b on(a.id=b.id);
//查询部门编号,部门名称,部门员工人数 select d.deptno, d.dname, count(e.ename) num from DEPT d left outer join EMP e on(d.deptno=e.deptno) group by d.deptno,d.dname order by d.deptno;
//查询部门在NEW YORK和CHICAGO的员工编号和员工名称 select e.empno,e.ename from DEPT d join EMP e on(d.deptno=e.deptno) where d.loc in ('NEW YORK','CHICAGO');
4)自连接 关联双方的表是同一个表。
//查询员工编号,员工名,上级编号,上级名称 select e.empno,e.ename,e.mgr,e1.ename from EMP e left outer join EMP e1 on(e.mgr=e1.empno); //查询员工编号,员工名,所在部门名,上级编号,上级名称 select e.empno,e.ename,d.dname,e.mgr,e1.ename from EMP e left outer join EMP e1 on(e.mgr=e1.empno) left outer join DEPT d on(d.deptno=e.deptno);