JOIN 连接查询
JOIN 用来把多张表的数据关联起来查询。
例如文章表只有 user_id,如果想显示作者名,就需要连接 users 表。
一、没有 JOIN 时的问题
文章表:
用户表:
如果只查文章表:
只能看到 user_id,看不到用户名。
二、INNER JOIN
查询文章和作者:
含义:
INNER JOIN 只返回两边都能匹配上的数据。
三、为什么要用表别名
不使用别名也可以:
但表多了以后会很长。
推荐写:
别名简短,SQL 更清楚。
四、连接三张表
查询文章、作者、分类:
结果会包含:
- 文章标题
- 作者名
- 分类名
- 创建时间
五、LEFT JOIN
LEFT JOIN 会保留左表数据,即使右表没有匹配数据。
查询文章和评论:
如果某篇文章没有评论:
- 文章仍然会出现。
- 评论字段显示为
NULL。
六、INNER JOIN 和 LEFT JOIN 的区别
常见选择:
七、多对多 JOIN
查询文章和标签:
关系链路:
如果一篇文章有两个标签,结果里这篇文章会出现两行。
八、给查询结果去重 DISTINCT
查询有标签的文章 ID:
DISTINCT 会去掉完全重复的结果行。
注意:DISTINCT 是对整行结果去重,不是只对某一个字段去重。
九、常见错误:忘记 ON 条件
错误示例:
缺少 ON p.user_id = u.id 会导致结果异常,可能产生大量无意义组合。
正确写法:
十、JOIN 查询模板
博客文章列表常用模板:

