Oracle 常用表连接

-- 交叉连接

select * from emp e,dept d; -- 192

select * from emp e cross join dept d; -- 199


-- 内连接

select *

  from emp e,dept d

where e.deptno = d.deptno; -- 192


select *

  from emp e

inner join dept d

    on e.deptno=d.deptno; -- 199 inner 可以省略


select *

  from emp e

  join dept d

    on e.deptno=d.deptno; -- 199 inner 可以省略 等值连接


select *

  from emp e

  join salgrade s

    on e.sal between s.losal and s.hisal; -- 199 不等值连接


select e.*,

      zh.rs

  from emp e

inner join emp_zh zh

    on e.sal = zh.max_sal -- 一个部门最大薪资对应了多个同部门的薪资,这种情况叫做数据发散(条件不严谨)

  and e.deptno = zh.deptno;


-- 外连接 左外连接 右外连接 全外连接 

-- 左外连接 把on匹配成功的数据显示出来同时要显示left join左边表的内容

select *

  from a_j t1

  left join b_j t2

    on t1.id=t2.id; -- 199


select *

  from a_j e ,b_j d

where e.id = d.id(+); -- 192 (+)放在b_j的id那边


-- 右外连接 把on匹配成功的数据显示出来同时要显示right join右边表的内容

select *

  from a_j t1

right join b_j t2

    on t1.id=t2.id; -- 199


select *

  from a_j e ,b_j d

where e.id(+) = d.id; -- 192 (+)放在a_j的id那边


-- 全外连接 full [outer] join

select *

  from a_j t1

  full join b_j t2

    on t1.id=t2.id; -- 199


select *

  from a_j e ,b_j d

where e.id = d.id(+)

union

select *

  from a_j e ,b_j d

where e.id(+) = d.id; -- 192


-- 注:筛选条件用and和where的区别

-- 内连接 效果一样,对关联后的所有数据进行筛选显示;

-- 外连接 and 数据保留但只对符合条件的数据关联匹配 where 对关联后的所有数据进行筛选显示;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容