MySQL JOIN说明

一、前言

        讲到SQL JOIN,大家一定多次见到过下面这张图片。这张图直观地展示了各种连接结果集的组成,但于我个人而言,来带来了诸多误解,主要是结果集数量方面。本篇博客也主要围绕这张图片来展开,谈谈我对SQL JOIN的梳理(主要是MySQL)。

 上图中,两集合的交集(中间部分)表示符合连接条件的数据,两边表示各自不符合连接条件的数据。

测试使用的表结构和数据如下:

class_info:班级信息表

students:学生表

二、关于JOIN

        在学习数据库系统概论课程的时候,就有学到内连接、外连接、自然连接、等值连接等概念和分类,在开发过程中使用 left join、right join 等就是这些概念的实现。

2.1、自然连接

说明:不使用 JOIN ON 关键字,将任意两张(多张)表直接进行笛卡尔积输出。

结果集:两张(多张)表的笛卡尔积组合。

结果集数量:两张(多张)表的数量的乘积。

2.2、INNER JOIN

说明:筛选出符合连接条件的进行笛卡尔积。

结果集:两表交集。

结果集数量:两表符合连接条件的乘积 。

2.3、LEFT JOIN

说明:左表为主,右表为条件。先筛选出符合连接条件的进行笛卡尔积,然后保留左表中没有进行连接的数据。

结果集:左表集合。

结果集数量:两表符合连接条件的乘积 + 左表没有进行连接的数量。

2.4、RIGHT JOIN

说明:右表为主,左表为条件。先筛选出符合连接条件的进行笛卡尔积,然后保留右表中没有进行连接的数据。

结果集:右表集合。

结果集数量:两表符合连接条件的乘积 + 右表没有进行连接的数量。

2.5、FULL JOIN

说明:MySQL不支持FULL JOIN,不过可以通过UNION关键字来合并LEFT JOIN 与 RIGHT JOIN来模拟FULL JOIN的效果。

结果集:两张表的并集。

结果集数量:两表符合连接条件的乘积 + 两表中各自没有进行连接的数量。

select * from students t1 full join class_info t2 on t1.class_id = t2.id
> 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'full join class_info t2 on t1.class_id = t2.id' at line 1
> 时间: 0s

三、参考文章

 【SQL】自然连接、内连接、左连接、右连接 - 知乎 (zhihu.com)

SQL 连接(JOIN) | 菜鸟教程 (runoob.com)

SQL 联接的可视化表示 - 代码项目 (codeproject.com)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值