SQL语言 - 自连接

自连接意思就是表与其自身进行连接。虽然自连接并不是必须的,可以通过其他方式来完成,但是在某些情况下,使用自连接就比较方便。比如一张员工信息表,这张表上有该员工的基本信息,还有指明了他的上司的ID号。但是同时他的上司也是员工,在这张表上也有他的信息。如果我们需要显示出所有员工的姓名和他上司的姓名,虽然我们可以通过其他方式,比如使用子查询来完成这一任务,但是无疑使用自连接可能是最好的办法。比如下面这张表:

员工号码员工姓名上司号码
001张三003
002李四005
003王五009
004赵六003
005吴七010
006周八005
007胡九 003
008陈十010
009杨二010
010刘一 
           

现在我们要查询出每个员工的姓名以及他上司的姓名,如果不使用自连接那么我们就可以用下面的方式来完成该查询
select name 员工姓名
,(select name from employee mg where ep.managerid = mg.id) 上司姓名 
from employee ep

查询结果:
 

员工姓名上司姓名
张三王五
李四吴七
王五杨二 
赵六王五
吴七刘一
周八吴七
胡九王五
陈十刘一
杨二刘一
刘一 

                 
在这个查询语句中,使用了一个子查询来完成对上司姓名的查询。
如果使用自连接。那么结构会感觉清晰许多,如:
select ep.name 员工姓名,mg.name 上司姓名 
from EMPLOYEE ep 
LEFT JOIN EMPLOYEE mg ON ep.managerid = mg.id
这里除了使用自连接外还使用了左外连接,因为‘刘一’这个员工是所有人的上司,并且他没有其他的上司,也就是说他是老总了。如果用内连接就会把这行记录过滤掉,因为没有和他匹配的上司姓名。使用左外连接就可以避免这一情况。

查询结果:
 

员工姓名上司姓名
胡九王五
赵六王五
张三 王五
周八吴七
李四 吴七
王五杨二
杨二刘一
陈十刘一
吴七刘一
刘一 

                
查询结果都是一样的,只是最后显示出来的顺序不一样。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值