MYSQL 寒假自学 2022 十一(三)

外连接查询

外连接分为左外连接(left outer join),右外连接(right outer join),满外连接(full outer join)

hit: oracle 里面有full join,可是在mysql对full join支持的不好,我们可以使用union来达到目的

首先给出两个表

表dept3

表emp3 

-- 查询哪些部门有员工,哪些部门没有员工(左外连接,即以左表为准)
select * from dept3 left outer join emp3 on dept3.deptno=emp3.dept_id;

以左表为主,结果如下

 可以发现和单纯的求交集相比,多了一个人事部的内容

下面给出右外连接的代码

-- 查询员工有哪些对应的部门,哪些没有
select * from dept3 right outer join emp3 on dept3.deptno = emp3.dept_id;

运行结果如下

可以发现多了一个丁春秋

 接下来给出组外连接多张表的格式

-- 组外连接多张表的格式
-- eg 以左外连接为例子,使用右的话只需要将left改成right
select * 
from A
	left join B on 条件1
	left join C on 条件2
	left join D on 条件3;

下面给出满外连接的代码

-- 使用union关键字实现左外连接和右外连接的并集
select * from dept3 left outer join emp3 on dept3.deptno=emp3.dept_id union select * from dept3 right outer join emp3 on dept3.deptno = emp3.dept_id;

美化后代码如下

-- 使用union关键字实现左外连接和右外连接的并集
SELECT
	* 
FROM
	dept3
	LEFT OUTER JOIN emp3 ON dept3.deptno = emp3.dept_id UNION
SELECT
	* 
FROM
	dept3
	RIGHT OUTER JOIN emp3 ON dept3.deptno = emp3.dept_id;

 运行结果如下

 不但多了一个人事部,还多了一个丁春秋

下面进行union 和union all 的讲解

-- 不可执行的语句
SELECT
	* 
FROM
	dept3
	FULL JOIN emp3 ON dept3.deptno = emp3.dept_id;

-- union 还有另外一种写法,但是和前面的结果不同
SELECT
	* 
FROM
	dept3
	LEFT OUTER JOIN emp3 ON dept3.deptno = emp3.dept_id UNION ALL
SELECT
	* 
FROM
	dept3
	RIGHT OUTER JOIN emp3 ON dept3.deptno = emp3.dept_id;

-- 由此可见,union是将两个查询结果上下拼接,并去重。
-- union all 是将两个查询结果拼接,不去重。

union all 的运行结果如下

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值