[数据库与SQL] - No.4 内连接(Inner Join)、外连接(Left Join、Right Join)及其在MYSQL中的实现

首先,我们放上一张图,清晰地显示什么是内连接,外连接:


(图片来自百度图片)

1. 内连接,又可以简称为连接。是我们投影在左右两表中匹配条件的行,在结果表中删除与其他被连接表中没有匹配行的所有行。

例如我们有以下两个表:

teacher 表:


course表:


我们以tid为条件,进行内连接(以其他非共有列为条件没有实际意义,)


可以看到,结果选取了course 和 teacher tid 列中在左右表均匹配的行,然后投影、连接到一起组成结果表。

同时,在mysql中,inner join 也可以简写为join


2. 外连接:内连接选取的是两个表均匹配的行,外连接时都会以一张表为基表,该表的内容会全部显示,然后加上两张表匹配的内容。如果基表的数据在另一张表没有记录。那么在相关联的结果集行中列显示为空值(NULL)

外连接分为左外连接和右外连接,全连接,如何记忆外连接中的主表呢?在外连接中,左右即表示主表是哪一个。

A  左连接 B : A(左表)为 主表,其所有行均被选取,B中不存在的行以null显示

A  右连接 B : B(右表)为主表,其所有行具备选取,A中不存在的行以null显示

全连接中,左右表所有行均被选取,不被匹配的行以null填充

我们来看几个例子:


在上面的例子中,由于course表为主表,所以course中所有的行被选中,teacher中没有匹配的行以null表示


在Mysql中,没有 full join 关键字,所以无法直接进行全连接。但是我们仔细查看全连接和左右连接的关系,我们会发现,全连接其实是左右连接的并集。

我们使用左右连接来实现全连接:



P.S. 文章不妥之处还望指正


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值