自连接 讲的很简单 通俗易懂


连接的实例
我们什么时候应该使用自 连接呢?我们来看下面的例子。
在oracle的scott的schema中有一个表是emp
在emp中的每一个员工都有自己的mgr(经理),并且每一个经理自身也是公司的员工,自身也有自己的经理。下面我们需要将每一个员工自己的名字和经理的名字都找出来。这时候我们该怎么做呢?
如果我们有两张这样的表分别叫worker和mgr,那么我们就很好写SQL 语句
Select worker.name,
Mgr.name
From worker,mgr
Where worker.mgr = mgr.id;
但现在我们只有一张表。你也许说我们现在再建一张表,把同样的数据拷贝过去不就可以了吗?是的,这样可以,但我们不会采用,因为这样就会很麻烦,而且数据严重冗余等等很多弊端。
我们有更好的方法,那就是自 连接
自连接的本意就是将一张表看成多张表来做连接。我们可以这样来写SQL 语句
select work.ename “工人”,’ works for’,mgr.ename “老板”
from emp work, emp mgr
where work.mgr = mgr.empno
order by work.ename;
得到了如下结果:
工人 ‘WORKSFOR’ 老板
——————– ——————– ——————–
ADAMS works for SCOTT
ALLEN works for BLAKE
BLAKE works for KING
CLARK works for KING
FORD works for JONES
JAMES works for BLAKE
JONES works for KING
MARTIN works for BLAKE
MILLER works for CLARK
SCOTT works for JONES
SMITH works for FORD
TURNER works for BLAKE
WARD works for BLAKE
实例讲解
这里我们注意到,King这个人没有出现在工人列里面,是因为这个人是整个公司的老板,他没有经理。如果这时候我们希望king这个人也出现在左侧,即使他没有老板。
我们可以使用刚刚才介绍过的oracle中外 连接
例如:
select work.ename “工人”,’ works for’,mgr.ename “老板”
from emp work, emp mgr
where work.mgr = mgr.empno (+)
order by work.ename;
得到结果:
工人 ‘WORKSFOR’ 老板
——————– ——————– ———-
ADAMS works for SCOTT
ALLEN works for BLAKE
BLAKE works for KING
CLARK works for KING
FORD works for JONES
JAMES works for BLAKE
JONES works for KING
KING works for
MARTIN works for BLAKE
MILLER works for CLARK
SCOTT works for JONES
SMITH works for FORD
TURNER works for BLAKE
WARD works for BLAKE
这是我们看到king的右侧是空白,也就是没有老板。
从这里我们看到,当表中的某一个字段与这个表中另外字段的相关时,我们可能用到自 连接
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值