sql左连接和右连接.doc
文本预览下载声明
sql的左连接和右连接
外连接使用外连接进行多表查询时,返回的查询结果集中仅包含查询条件和连接条件的行。内连接除了消除了与另一个表中的任何不匹配的行,而外连接扩展了内连接的结果集,除了返回所有匹配的行外,还会返回一部分或全部不匹配的行,这就取决于外连接的类型。对于外连接,Oracle中可以使用(+)来表示,也可以使用left right和full outer join关键字。外连接可以分为下面三类:左外连接:(left outer join或left join)右外连接:(right outer join或right join)全外连接:(full outer join或full join)使用外连接,列出与连接条件相匹配的行,并列出左表(左外连接),右表(右表连接)或两个表(全外连接)中,所有符合检索条件的数据行。事例如下:我们使用oracle自带的emp和salgrade表进行操作。salgrade表表示的是工资的等级,每个等级的工资分别有最高值和最低值。emp表为员工的基本信息SQL select * from salgrade;GRADE LOSAL HISAL---------- ---------- ----------1 700 12002 1201 14003 1401 20004 2001 30005 3001 9999SQL select empno,ename,sal,grade2 from emp e inner join salgrade s3 on e.sal between s.losal and s.hisal;EMPNO ENAME SAL GRADE---------- ---------- ---------- ----------7369 SMITH 800 17876 ADAMS 1100 17900 JAMES 950 17521 WARD 1250 27654 MARTIN 1250 27934 MILLER 1300 27499 ALLEN 1600 37844 TURNER 1500 37566 JONES 2975 47698 BLAKE 2850 47782 CLARK 2450 47788 SCOTT 3000 47902 FORD 3000 47839 KING 5000 5已选择 14 行。SQL insert into emp values(7937,Candy,null,null,null,500,null,null);//插入的数据中的sal工资为500不在员工的工资范围之内已创建 1 行。SQL insert into salgrade values(6,10000,20000);--插入的等级以及工资也不再范围之内已创建 1 行。SQL select e.empno,e.ename,e.sal,d.grade2 from emp e left outer join salgrade d --使用左联接3 on e.sal between d.losal and d.hisal;EMPNO ENAME SAL GRADE---------- ---------- ---------- ----------7839 KING 5000 57902 FORD 3000 47788 SCOTT 3000 47566 JONES 2975 47698 BLAKE 2850 47782 CLARK 2450 47499 ALLEN 1600 37844 TURNER 1500 37934 MILLER 1300 27521 WARD 1250 27654 MARTIN 1250 27876 ADAMS 1100 17900 JAMES 950 17369 SMITH 800 17937 Candy 500已选择 15 行。从上面的数据可以看出,除了查出了所有符合条件的数据之外,我们还查处了不在范围之内的数据?7937 Candy 500右外连接右外连接是在结果中除了显示满足条件的行外,还显示join右侧表中所有满足检索条件的行。select distinct e.deptno,d.deptno from emp e right outer join dept d on e.deptno=d.deptno;如果使用佳豪实现右外连接,上述的语句等价于下面的语句:select distinct e.deptno,d.deptno from emp e,dept d where e.deptno(+)=d.deptno
显示全部