ORACLE SQL 多表连接
第四章:多表连接迪卡尔集: 表连接时没有指明连接条件
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
页:
[1]