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 到底写在哪里

相关推荐
Sylvia33.32 分钟前
足球数据接口开发实战:如何用火星数据API盘活赛事应用
java·服务器·开发语言·数据库·python
ruleslol1 小时前
Mybatis11-不同的数据库连接池的配置
数据库·mybatis
苏州邦恩精密1 小时前
蔡司3D扫描仪厂家如何应用于航空航天制造
大数据·数据库·人工智能·3d·自动化·制造
alxraves2 小时前
医院远程会诊系统:数据库模块设计与实现
数据库·oracle
wordpress资料库2 小时前
WordPress数据表前缀的修改方法(完整版)
数据库·wordpress数据表前缀·wordpress修改前缀
苦瓜汤补钙2 小时前
Oracle JDK8 环境配置-Win11
开发语言·数据库·笔记·oracle
Dovis(誓平步青云)3 小时前
《 AI直连数据库落地实践:基于MCP协议打通开发工具与数据库全链路运维分析》
大数据·linux·运维·数据库·人工智能·架构
一缕清烟在人间3 小时前
鸿蒙应用开发实战【27】— DatabaseService 数据库初始化
javascript·数据库·harmonyos·鸿蒙系统
G.O.G.O.G3 小时前
《LeetCode SQL 从入门到精通(MySQL)》09
sql·mysql·leetcode
ApacheSeaTunnel3 小时前
一套替代四套!同程旅行用 Apache SeaTunnel 搭建多模态统一数据通道
大数据·数据库·ai·开源·数据集成·seatunnel·技术分享·数据同步