日期:2014-05-16  浏览次数:20578 次

oracle多表连接

多表连接:
查询的一种,数据来源不再是单一的一个表,我们可以重多个表中提取相关联的数据,比如,从emp和dept表中找出人员 所在的部门名称,----多个表来联合查询


1.查询的时候,可以from多个表
SELECT * FROM EMP,DEPT
这样会产生一个笛卡尔集

表示:两个表任何组合的结果


2.需求:取关联数据
我的部门20号,我想要20号部门的名称====连接条件


select emp.ename,dept.dname from emp,dept where emp.deptno=dept.deptno


3.语法格式:
select 字段 from 表1,表2 where 表1.列=表2.列
select empno,ename,d.deptno,dname from emp e,dept d where e.deptno=d.deptno

当然,你可以为表定义一个别名,但是不能使用as(字段重命名可以使用)

不同的连接条件可以使用and或or
select empno,ename,d.deptno,dname,e.sal from emp e,dept d where e.deptno=d.deptno And sal>1600

?

4.使用不等值连接
连接条件:一个表中的记录,在另一个表中能够找到匹配的记录即可
Select e.*,g.grade From emp e,salgrade g Where e.sal Between g.losal And g.hisal

?

5.外连接:把不满足条件的数据显示出来
Select * From EMP E,DEPT D Where E.DEPTNO=D.DEPTNO(+)
外连接可以在左表,也可以在右表


6.自连接
从同一个表中联合查询
Select E.ENAME,P.ENAME From EMP E,EMP P Where E.MGR=P.EMPNO

-----sql1999:
7.交叉连接:
其结果是笛卡尔集,是没加任何条件所产生出来的数据集合

8.自然连接:默认情况下,以两个表中有相同名称的列来进行连接查询
Select * From EMP Natural Join DEPT

其效果相当于
select * from emp,dept where emp.deptno=dept.deptno

9.使用using子句来查询
select * from emp join dept using(deptno)

10.使用on子句
使用on来指定连接具体条件
Select * From EMP Join DEPT On? emp.deptno=dept.deptno And EMP.DEPTNO=20


多个表连接查询

Select? E.ENAME,E.SAL,D.DNAME,S.GRADE
 FROM EMP E Join DEPT D On E.DEPTNO=D.DEPTNO
Join SALGRADE S On E.SAL Between S.LOSAL And S.HISAL

11.外连接:
与内连接的区别:
内连接========查询条件相等的记录(能够匹配的)
外连接========条件相等 的+没匹配的

Select * From EMP E Left Outer Join DEPT D On E.DEPTNO=D.DEPTNO
Select * From EMP E Right Outer Join DEPT D On E.DEPTNO=D.DEPTNO
Select * From EMP E Full Outer Join DEPT D On E.DEPTNO=D.DEPTNO