多标联查-外连接

mac2022-06-30  24

3)外连接   等值连接,需要两个表的关联字段等值才将结果返回。 如果需要将某一个表记录全部返回,即使另一个表找不到 对等字段记录,此时可以使用外连接。   *a.左外连接     ----使用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 ja  right outer join jb on(ja.id=jb.id); 等价于 select * from jb  left outer join ja on(ja.id=jb.id)   ----在JOIN...ON之前的外连接写法-------- //(+)所在表为补充表,另一方是主表 select * from ja,jb where ja.id(+)=jb.id; //jb为主,ja为补充     c.全外连接    全外连接=左外连接+右外链接-(重复记录)   select * from ja     full outer join jb on(ja.id=jb.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;     EMPNO ENAME DEPTNO DNAME ... ... 10 ... NULL NULL 40 ... NULL NULL 50 ... //按部门分组统计,count(*)和count(ename)的区别 count(*) = 1 count(ename) = 0   //查询部门在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');

转载于:https://www.cnblogs.com/yunman/p/5497558.html

最新回复(0)