您的位置:首页 > 数据库 > Oracle

ORACLE SQL 多表连接

2015-06-18 14:34 351 查看
第四章:多表连接
迪卡尔集: 表连接时没有指明连接条件
select ename,loc
from emp,dept;

等值连接:
select ename,loc
from emp,dept
where emp.deptno=dept.deptno;

外键连接:
select ename,loc
from emp,dept
where emp.deptno(+)=dept.deptno;

不等连接:
select ename,grade,sal,losal,hisal
from emp,salgrade
where sal between losal and hisal;

自身连接:
select e.ename,m.ename
from emp e,emp m
where e.mgr=m.empno;

select e.ename,m.ename
from emp e,emp m
where e.mgr=m.empno(+);

1)不可以在查询块中使用(+) 当它同时包含 join的from语句中
2)(+)只是在where语句中,并且只能对应一个表或视图的一行字段
3)如果A和B做联接时有多个条件,那么(+)必须完善所有的匹配条件,
如果没有 ,oracle不会警告你~只是结果自然不同的
4)不可以在作出一个表外查询 另张表内查询的(+)联接操作~~
5)不可以用(+)外联接到自己 当然Self Join是可以的
6)含(+)的Where后的注意
OR不可用
IN不可用
子查询不可用

n张表连接至少需要n-1个条件!

SQL99的连接语法:
交叉连接:产生迪卡尔集
select ename,loc
from emp
cross join dept;

自然连接:按照列名作等值连接
select ename,loc
from emp
natural join dept;

自然连接:如果两张表有多个列同名,使用using子句显示指明连接时使用哪些列做等值连接
select ename,loc
from emp join dept
using (deptno);

使用on子句可以任意指明两张表连接时使用的列:
select ename,loc
from emp join dept
on (emp.deptno=dept.deptno);

右外连接:right outer join
select ename,loc
from emp right outer join dept
using (deptno);

左外连接:left outer join

全部外连接:full outer join
select ename,loc
from emp full outer join dept
using (deptno);

--oracle实现Full Join的方法:使用集合 union
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle join 多表连接