news 2026/4/18 10:29:36

left join、right join和join,傻傻分不清?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
left join、right join和join,傻傻分不清?

一、核心思想:用“文氏图”和“表格视角”一次性讲清

所有的 JOIN 操作,都可以从两个维度理解:集合论维度(文氏图)表格操作维度。前者帮你建立直觉,后者教你实际使用。

1. 集合论视角(你想建立的理解)

想象两个圆圈:

  • A表:比如员工表

  • B表:比如部门表

它们重叠的部分,就是关联字段能匹配上的记录(比如员工都有明确的部门ID)。

JOIN 类型文氏图白话解释
INNER JOIN(即JOIN)https://sql-joins.leopard.in.ua/inner-join.png只取交集。只返回两个表能匹配上的记录。没部门的员工和没员工的部门,都不出现。
LEFT JOIN(左连接)https://sql-joins.leopard.in.ua/left-join.png保左全,联右部左表(A)的全部记录一定保留,右表(B)只显示能匹配上的部分。匹配不上的,右表字段用NULL填充。
RIGHT JOIN(右连接)https://sql-joins.leopard.in.ua/right-join.png保右全,联左部右表(B)的全部记录一定保留,左表(A)只显示能匹配上的部分。匹配不上的,左表字段用NULL填充。
FULL OUTER JOIN(全外连接)https://sql-joins.leopard.in.ua/full-outer-join.png两边全要。左右两表的全部记录都保留,能匹配的匹配,匹配不上的用NULL补充。

2. 表格操作视角(你写代码时的画面)

这才是你写 SQL 时应该想象的!假设我们有:

  • 员工表(employees:

emp_idemp_namedept_id
1张三101
2李四102
3王五NULL
  • 部门表(departments:

dept_iddept_name
101技术部
102市场部
103行政部

二、逐一分辨:语法、结果与场景

1. INNER JOIN(内连接) - 最常用的JOIN
  • 口语叫法:“JOIN” 或 “INNER JOIN”,两者完全等同。

  • 核心逻辑求交集。只关心两表有明确关联的数据。

  • 语法

    sql

    SELECT ... FROM 表A A [INNER] JOIN 表B B ON A.key = B.key; -- `INNER` 关键字可省略
  • 我们的例子

    sql

    SELECT e.emp_name, d.dept_name FROM employees e JOIN departments d ON e.dept_id = d.dept_id;
  • 结果

    emp_namedept_name
    张三技术部
    李四市场部
    (王五的dept_idNULL,匹配不上;行政部没有对应的员工,所以都不出现)
  • 何时使用?

    • 绝大多数业务查询:当你只想获取有完整关联信息的数据时。例如,“查询所有已分配部门的员工及其部门信息”。

2. LEFT JOIN(左连接) - 保底查询神器
  • 口语叫法:“左连接”或“左外连接”(LEFT OUTER JOINOUTER可省略)。

  • 核心逻辑以左表为基准。左表是“主子”,记录一条不少;右表是“跟班”,有信息就贴上,没有就用NULL补位。

  • 语法

    sql

    SELECT ... FROM 表A A LEFT [OUTER] JOIN 表B B ON A.key = B.key;
  • 我们的例子

    sql

    SELECT e.emp_name, d.dept_name FROM employees e LEFT JOIN departments d ON e.dept_id = d.dept_id;
  • 结果

    emp_namedept_name
    张三技术部
    李四市场部
    王五NULL
    左表员工全在,王五没部门,所以部门为NULL
  • 何时使用?

    • 查找“缺失”:“查询所有未分配部门的员工”(WHERE d.dept_id IS NULL)。

    • 主从报表:以主表(如订单)为核心,关联子表(如用户、商品),即使子表信息缺失也要展示主表记录。

    • 最常用:因为它明确指定了主查询表,逻辑清晰。LEFT JOIN的使用频率远高于RIGHT JOIN

3. RIGHT JOIN(右连接) - 不常用的左连接镜像
  • 口语叫法:“右连接”或“右外连接”。

  • 核心逻辑以右表为基准。右表是“主子”,左表是“跟班”。它本质上就是LEFT JOIN的反向操作

  • 语法

    sql

    SELECT ... FROM 表A A RIGHT [OUTER] JOIN 表B B ON A.key = B.key;
  • 我们的例子

    sql

    SELECT e.emp_name, d.dept_name FROM employees e RIGHT JOIN departments d ON e.dept_id = d.dept_id;
  • 结果

    emp_namedept_name
    张三技术部
    李四市场部
    NULL行政部
    右表部门全在,行政部没员工,所以员工名为NULL
  • 关键认知
    A RIGHT JOIN B完全等同于B LEFT JOIN A
    上面的例子等价于:

    sql

    SELECT e.emp_name, d.dept_name FROM departments d -- 部门表变成了左表 LEFT JOIN employees e ON d.dept_id = e.dept_id; -- 员工表变成了右表
  • 何时使用?

    • 极少。因为人们习惯从左向右阅读,将主表放在FROM后,用LEFT JOIN关联其他表更符合思维习惯。刻意使用RIGHT JOIN会让SQL可读性变差。


三、终极记忆心法与总结

1. 一张图总结关系
下图完美诠释了所有 JOIN 类型的数据流向(请将此图刻在脑海里):
https://i.stack.imgur.com/UI25E.jpg

2. 三步选择法(面对问题时的思考路径)
定主表:我这次查询,必须以哪个表的记录为绝对核心?—— 把它放在FROM后。
明需求
- 只要两表都有的数据? -> 用INNER JOIN
- 主表记录必须全部保留,关联信息有的就带上? -> 用LEFT JOIN
- (罕见情况)确实需要以第二个关联表为绝对核心? -> 可以考虑RIGHT JOIN,但不如把主表换到FROM后用LEFT JOIN
查缺失:如果想找主表里在关联表中没有对应项的记录,就在LEFT JOIN后加WHERE 关联表.key IS NULL

3. 核心要点表格

特性INNER JOINLEFT JOINRIGHT JOIN
别名JOINLEFT OUTER JOINRIGHT OUTER JOIN
核心表无(对称)左表是核心右表是核心
结果倾向两表交集左表全集+ 右表匹配右表全集+ 左表匹配
匹配失败时丢弃该行保留左表行,右表填NULL保留右表行,左表填NULL
使用频率⭐⭐⭐⭐⭐⭐⭐⭐⭐
可替代性不可替代A LEFT JOIN B可用B RIGHT JOIN A替代总可用LEFT JOIN重写

四、一句话分清楚

  • JOIN(INNER JOIN):“只给我看你们俩都有的部分。”

  • LEFT JOIN:“把左边人的名单全给我,右边的人能配上就对号入座,配不上就空着。”

  • RIGHT JOIN:“把右边人的名单全给我……”(但你可以永远用LEFT JOIN来实现它,所以忘了它吧!)

最终建议:熟练掌握INNER JOINLEFT JOIN,足以应对99%的场景。将RIGHT JOIN理解为一种语法糖,看到别人用时知道什么意思即可,自己写SQL时,优先使用LEFT JOIN

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/13 21:24:13

Qwen3-VL-2B周边工具推荐:提升开发效率的3大辅助组件

Qwen3-VL-2B周边工具推荐:提升开发效率的3大辅助组件 如果你已经体验过Qwen3-VL-2B-Instruct这个视觉理解机器人,可能会发现它确实很强大——能看懂图片、识别文字、回答图文问题。但作为开发者,我们总希望效率能更高一点,工作流…

作者头像 李华
网站建设 2026/4/17 1:55:48

造相Z-Image文生图模型v2:Typora文档自动化生成方案

造相Z-Image文生图模型v2:Typora文档自动化生成方案 1. 为什么需要文档插图自动化 写技术文档时,最让人头疼的往往不是文字内容,而是配图。你可能经历过这样的场景:花半小时写完一段清晰的技术说明,却卡在配图环节—…

作者头像 李华
网站建设 2026/4/18 22:43:33

Qwen3-ASR-1.7B部署教程:HTTP入口访问+实例IP直连WebUI完整步骤

Qwen3-ASR-1.7B部署教程:HTTP入口访问实例IP直连WebUI完整步骤 1. 快速了解Qwen3-ASR-1.7B Qwen3-ASR-1.7B是阿里通义千问推出的端到端语音识别模型,拥有17亿参数,支持中、英、日、韩、粤等多语种及自动语言检测功能。这个模型基于qwen-asr…

作者头像 李华
网站建设 2026/4/18 1:47:09

AI智能文档扫描仪详细步骤:如何获得最佳扫描对比度

AI智能文档扫描仪详细步骤:如何获得最佳扫描对比度 1. 为什么对比度是扫描质量的关键 你有没有遇到过这样的情况:拍完一张合同照片,上传到扫描工具里,结果边缘识别失败,系统根本找不到文档轮廓?或者好不容…

作者头像 李华
网站建设 2026/4/18 9:14:41

Qwen3-ASR-1.7B在STM32CubeMX项目中的低功耗实现

Qwen3-ASR-1.7B在STM32CubeMX项目中的低功耗实现 1. 为什么嵌入式语音唤醒需要更轻量的方案 最近在调试一款智能门锁的语音唤醒模块,发现传统方案总在功耗和响应速度之间反复妥协。用现成的云端ASR服务,网络连接和数据上传让待机功耗直接翻倍&#xff…

作者头像 李华