一、前言

上一篇
SQL 第三篇:表关系设计(user_id 到底是什么)
我们已经理解了:

user.id
=
user_detail.user_id

也知道了:

表关系,本质是相同字段值

但新的问题来了:


数据库怎么把两张表“拼”起来?

比如:

用户表
+
用户详情表

最后变成:

用户详情页

这一步,就是:

❗ JOIN


二、什么是 JOIN?

JOIN 可以理解成:

把多张表组合成一份业务数据

例如:


user 表

id username
1 zhangsan

user_detail 表

user_id real_name
1 张三

通过 JOIN 后:

id username real_name
1 zhangsan 张三

三、第一条 JOIN SQL(必须记住)

SELECT
    u.id,
    u.username,
    d.real_name
FROM user u
LEFT JOIN user_detail d
ON u.id = d.user_id;

这一句非常重要。

后面很多业务查询,本质上都是这个结构。


四、这一句 SQL 到底怎么读?

很多人第一次看 JOIN 会懵。

其实拆开就很简单。


五、SELECT(查什么)

SELECT
    u.id,
    u.username,
    d.real_name

表示:

最终返回哪些字段

六、FROM(从哪张表开始)

FROM user u

这里:

user

是主表。


u 是什么?

user u

等价于:

user AS u

意思是:

给 user 表起个别名

后面:

u.id

就表示:

user.id

七、LEFT JOIN(怎么拼)

LEFT JOIN user_detail d

表示:

把 user_detail 拼到 user 上

d 是什么?

和 u 一样:

表别名

所以:

d.real_name

表示:

user_detail.real_name

八、ON(拼接条件)

这一句最关键:

ON u.id = d.user_id

含义:

当 user.id 和 user_detail.user_id 相等时,
认为它们属于同一个用户

这一步,就是:

❗ JOIN 的核心


九、数据库到底怎么“拼表”?

本质上:

数据库会:


1️⃣ 先查 user

id username
1 zhangsan
2 lisi

2️⃣ 再查 user_detail

user_id real_name
1 张三

3️⃣ 按 ON 条件匹配

u.id = d.user_id

于是:


user.id = 1

匹配:

user_detail.user_id = 1

拼成功。


user.id = 2

找不到:

user_detail.user_id = 2

十、LEFT JOIN 到底是什么意思?

LEFT JOIN 的核心:

❗ 左边表的数据全部保留


示例


user 表

id username
1 zhangsan
2 lisi

user_detail 表

user_id real_name
1 张三

LEFT JOIN 结果

id username real_name
1 zhangsan 张三
2 lisi NULL

因为:

lisi 没有详情

但:

LEFT JOIN 会保留左表数据

十一、INNER JOIN 又是什么?

INNER JOIN 表示:

必须匹配成功才返回

INNER JOIN 结果

id username real_name
1 zhangsan 张三

因为:

lisi 没有匹配到 user_detail

所以被过滤掉。


十二、企业里为什么更常用 LEFT JOIN?

因为业务里:

主数据一般必须保留

例如:


用户列表

即使:

用户没填资料

也必须显示用户。

所以:

LEFT JOIN 更常见

十三、真正的企业 JOIN(多表)

企业里经常会:

user
+
user_detail
+
user_address

一起查。


示例

SELECT
    u.id,
    u.username,
    d.real_name,
    a.receiver_name,
    a.phone,
    a.detail_address
FROM user u
LEFT JOIN user_detail d
    ON u.id = d.user_id
LEFT JOIN user_address a
    ON u.id = a.user_id
WHERE u.id = 1;

十四、这一句 SQL 的业务含义

其实就是:

查询用户详情页

包括:

  • 用户名
  • 真实姓名
  • 收货地址
  • 收货电话

👉 你会发现:

JOIN 开始真正服务业务了


十五、JOIN 的本质(一句话讲透)

❗ JOIN 本质不是“表拼接”

而是:

👉 根据相同字段值,组合业务数据


十六、这一篇真正的核心

这一篇最重要的不是:

LEFT JOIN
INNER JOIN

而是:

❗开始理解:

“数据库怎么从多张表,拼成接口数据”


十七、一句话总结

JOIN 的核心:

👉 ON 条件决定“谁和谁是一组数据”


下一篇

SQL 第五篇:SQL 如何真正接入 Spring Boot 项目

我们会开始讲:

Mapper
QueryMapper
MyBatis-Plus
XML
Service

以及:企业里的 SQL 到底写在哪里

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐