xywuyiba8 发表于 2018-9-9 13:00:58

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]
查看完整版本: ORACLE SQL 多表连接