全外连接给你讲

你知道的越多,你不知道的就越多

先来看看标准SQL里面定义的外连接的三种类型:

  1. 左外连接
  2. 右外连接
  3. 全外连接

        其中,左外连接和右外连接没有本质的区别,用作主表的表写在运算符左侧就是左外连接,卸载运算符右侧就是右外连接,在这三种里面,用的最多的就是左外和右外了,全外连接用的情况比较少,但是不妨碍我们去了解它,为什么用的少呢?我认为很大一部分原因是Mysql中还没有支持全外连接,而我们学习sql大部分都是用的Mysql,所以我们用的最多的还是前面两种。第三种Mysql就不支持。

全外连接是什么:

下面通过一个例子来看一看全外连接

 

 

        上面这两张表中,田中和铃木都属于公共的部分,而伊集院和西园寺分别属于两张表各自拥有的,全外连接就是能够将这两张内容不一致的表,没有遗漏的获取全部信息的方法。

-- 全外连接保留全部信息
 SELECT COALESCE(A.id, B.id) AS id,
 A.name AS A_name, 
B.name AS B_name 
FROM Class_A A FULL OUTER JOIN Class_B B
 ON A.id = B.id;

 

        上面就是全外连接的结果集

可以看到四个人的名字全部出现了,Coalesce函数返回第一个非null的数。

上面的sql代码块虽然可以跑出来结果,但是我们用Mysql是不成功的,那么我们怎么办呢?对于mysql中实现全外连接,可以使用左外连接和右外连接,然后再将两个结果进行Union,同样可以达到目的。

 

这种方法虽然可以实现,但是代码比较冗长,而且使用两次连接后还要用union来合并,性能也不是很好。因此,换一个角度,

内连接,就是求集合的积

 

全外连接,就是求集合的和

 

用外连接求差集

在上面的两个Class表中,我们用外连接来求A-B的差集。

  1. 求A-B的差集,那么A就要成为主表,进行左连接。从下面表中,可以看到差集是伊集院

 

2.显示伊集院

在一的基础上,我们进行筛选,找到B的名字为空的就是差集

 

同时用这个方法,我们来求B-A的差集

 

用图片来表示差集

A-B的差集

 

B-A的差集

 

总结:

其实呢,全外连接我们用的很少,基本上的需求都是用左连接和外连接,有时候内连接用的也很多,下一篇会讲解窗口函数,首先用的不是窗口函数,而且用的是递归来实现窗口函数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值