【漫话机器学习系列】267.JOINS

图解 SQL 多表连接语法(JOIN):一句话也能看懂的连接方式全解析!

适合 SQL 初学者、中级开发者以及数据分析师快速理解 SQL 的 JOIN 操作。


一、前言

在数据库开发、数据分析与数据挖掘中,我们经常需要将多个表的数据进行关联,这就是所谓的“多表连接”。在 SQL 中,我们通过 JOIN 语句来实现这一操作。

然而,很多初学者在学习 JOIN 语法时会感到非常困惑,不清楚各类 JOIN 的本质区别。今天,我们通过一张可视化图解,一次性搞懂所有主流 SQL JOIN 类型。


二、JOIN 的基本类型图示

我们先来看图(如下),图中展示了 5 种常见的 JOIN 类型:


图注:此为 SQL 的多表连接语句

图中用 A 表和 B 表两个集合表示两个数据表,绿色阴影部分表示 JOIN 操作选中的数据区域。


三、JOIN 类型逐一详解


1. LEFT JOIN(左连接)

图示:
绿色部分为 A 表中所有记录,无论它们是否与 B 表中的记录匹配。

语法:

SELECT *
FROM A
LEFT JOIN B
ON A.id = B.id;

说明:

  • 取出 A 表中的全部记录;

  • 如果 A 表中的记录在 B 表中有匹配,就显示 B 表的内容;

  • 如果没有匹配,B 表字段为 NULL。


2. RIGHT JOIN(右连接)

图示:
绿色部分为 B 表中所有记录,无论它们是否与 A 表中的记录匹配。

语法:

SELECT *
FROM A
RIGHT JOIN B
ON A.id = B.id;

说明:
与 LEFT JOIN 相反:

  • 取出 B 表中的全部记录;

  • 如果 B 表中的记录在 A 表中有匹配,就显示 A 表的内容;

  • 没有匹配时,A 表字段为 NULL。


3. INNER JOIN(内连接)

图示:
只选中 A 和 B 表中都存在匹配的记录,也就是图中交集的部分。

语法:

SELECT *
FROM A
INNER JOIN B
ON A.id = B.id;

说明:

  • 只返回两张表中符合连接条件的记录;

  • 没有匹配的行会被丢弃;

  • 最常用的 JOIN 类型。


4. OUTER JOIN(全外连接)

图示:
A 表和 B 表中所有记录都被保留,即图中两个圆形的并集部分。

语法(部分数据库支持 FULL OUTER JOIN):

SELECT *
FROM A
FULL OUTER JOIN B
ON A.id = B.id;

说明:

  • 所有记录都会被保留;

  • 没有匹配的部分用 NULL 填充;

  • 并不是所有数据库(如 MySQL)都支持 FULL OUTER JOIN。


5. OUTER MINUS INNER(外连接减去内连接)

图示:
只显示左右两边不相交的部分,即只显示没有匹配的 A 或 B 的数据。

在 SQL 中等价于:

-- LEFT 表未匹配部分
SELECT *
FROM A
LEFT JOIN B ON A.id = B.id
WHERE B.id IS NULL

UNION

-- RIGHT 表未匹配部分
SELECT *
FROM B
LEFT JOIN A ON A.id = B.id
WHERE A.id IS NULL;

说明:

  • 常用于查找“只在一张表中存在”的记录;

  • FULL OUTER JOIN - INNER JOIN 的效果实现方式。


四、总结:对比一览表

JOIN 类型是否保留A中未匹配项是否保留B中未匹配项是否保留匹配项
INNER JOIN
LEFT JOIN
RIGHT JOIN
FULL OUTER JOIN
OUTER MINUS INNER是(非匹配)是(非匹配)

五、实用建议

  1. 初学者建议优先掌握 INNER JOINLEFT JOIN

  2. 在实际项目中,很多数据分析需求是“查询 A 表中有哪些数据没有匹配到 B 表”,这时候就用 LEFT JOIN + WHERE B.xx IS NULL

  3. 为提高效率,JOIN 时注意对连接字段建立索引。


六、结语

通过一张图,你是否对 JOIN 的世界豁然开朗了?无论你是开发者还是数据分析师,掌握 JOIN 是通向高级 SQL 的必经之路。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值