SQL 第四篇:JOIN 实战(数据库到底是怎么“拼表”的)

一、前言

上一篇
SQL 第三篇:表关系设计(user_id 到底是什么)

我们已经理解了:

sql 复制代码
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(必须记住)

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(查什么)

sql 复制代码
SELECT
    u.id,
    u.username,
    d.real_name

表示:

复制代码
最终返回哪些字段

六、FROM(从哪张表开始)

sql 复制代码
FROM user u

这里:

复制代码
user

是主表。


u 是什么?

复制代码
user u

等价于:

复制代码
user AS u

意思是:

复制代码
给 user 表起个别名

后面:

复制代码
u.id

就表示:

复制代码
user.id

七、LEFT JOIN(怎么拼)

sql 复制代码
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

一起查。


示例

sql 复制代码
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 到底写在哪里

相关推荐
tongluowan0073 小时前
MySQL中列数量及长度
数据库·mysql
-liming-4 小时前
单片机设计_串口调试工具
数据库·单片机·mongodb
鹿角片ljp4 小时前
从告警检测到智能研判:SQL 注入研判模型的设计与实践
数据库·sql
小新同学^O^5 小时前
简单学习 --> Spring事务
数据库·学习·spring
前进的李工5 小时前
MySQL慢查询日志优化实战
数据库·mysql·性能优化
KaMeidebaby6 小时前
卡梅德生物技术快报|禽类成纤维细胞 FISH 实验:鸟类性别染色体基因定位技术实现与数据验证
前端·数据库·其他·百度·新浪微博
ECT-OS-JiuHuaShan6 小时前
彻底定理化:从量子纠缠到量子代谢
数据库·人工智能·学习·算法·生活·量子计算
八月瓜科技6 小时前
用AI来省电?iOS26.5正式版全球推送:信号弱网双提升,AI省电模式上新
数据库·人工智能·科技·深度学习·机器人
dhashdoia6 小时前
GPT-5.5 代码开发实战:Codex与Browser Use深度集成与星链4SAPI优化方案
java·数据库·人工智能·gpt·架构