一、前言上一篇我们已经理解了user.id user_detail.user_id也知道了表关系本质是相同字段值但新的问题来了数据库怎么把两张表“拼”起来比如用户表 用户详情表最后变成用户详情页这一步就是❗ JOIN二、什么是 JOINJOIN 可以理解成把多张表组合成一份业务数据例如user 表idusername1zhangsanuser_detail 表user_idreal_name1张三通过 JOIN 后idusernamereal_name1zhangsan张三三、第一条 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️⃣ 先查 useridusername1zhangsan2lisi2️⃣ 再查 user_detailuser_idreal_name1张三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 表idusername1zhangsan2lisiuser_detail 表user_idreal_name1张三LEFT JOIN 结果idusernamereal_name1zhangsan张三2lisiNULL因为lisi 没有详情但LEFT JOIN 会保留左表数据十一、INNER JOIN 又是什么INNER JOIN 表示必须匹配成功才返回INNER JOIN 结果idusernamereal_name1zhangsan张三因为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 到底写在哪里