MySQL—多表查询—自连接

一、引言

自连接,顾名思义就是自己连接自己。

自连接的语法结构:

表 A 别名 A join 表 A 别名 B ON 条件 ...;

注意

1、这种语法有一个关键字:join

2、自连接查询可以是内连接的语法,可以是外连接的语法(当然包括左外连接和右外连接)

接下来去工具 DataGrip 通过两个需求去演示一下 自连接查询 的语法。 

二、实操

(0)两张表的结构以及数据展示

员工表 emp

部门表 dept

(1)查询员工及其所属领导的名字

1、分析

在表 emp 中没有直接的表示出某某的直属领导是谁,只有一个所属领导id号(managerid)

而对于一个企业的领导,它也是企业的员工。

表结构:emp。

单靠单表查询是不可能完成所要的需求的。所以要对自己进行子连接查询。

把emp看成两张表:员工表和领导表(仔细深思一下)

这就是它们之间的编写思路

2、编写SQL语句
/*类似于内连接,有null 的值时没有显示*/
SELECT a.name,b.name FROM emp AS a JOIN emp AS b WHERE a.managerid=b.id;

(2)直询所有员工emp及其领导的名字emp ,如果员工没有领导,也需要查询出来

1、分析

如果这个员工的字段 managerid = null ,也需要把这个员工查询出来。

这时只能用到外连接

因为内连接只能查询到交集的数据,外连接才会包含左表或者右表的数据

表结构:emp a , emp b

2、编写SQL语句

/*查出直属领导为 null 也要显示*/
SELECT a.name AS '员工',b.name AS '领导' FROM emp AS a LEFT OUTER JOIN emp AS b ON a.managerid=b.id;

这样就通过两个自连接查询完成两个需求。

在自连接查询的时候,一定注意要给表名起别名。

要不然我们会不清楚条件,以及返回的字段到底是哪一张表当中的字段。

这篇博客的内容就结束了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岁岁岁平安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值