news 2026/4/16 15:01:07

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/16 12:21:12

基于 Vue+SpringBoot 的养老服务平台设计与实现(源码+lw+部署文档+讲解等)

课题介绍 本课题旨在设计并实现一款基于VueSpringBoot的养老服务平台,解决当前养老服务中信息传递不畅、服务资源分散、供需匹配低效、养老管理规范化不足等痛点,搭建一个便捷、高效、贴合老年群体及养老机构需求的综合性养老服务数字化平台。系统采用前…

作者头像 李华
网站建设 2026/4/15 13:08:17

基于OFA-VE的视觉搜索系统:电商场景实战

基于OFA-VE的视觉搜索系统:电商场景实战 1. 这不是传统搜索,是“看图找货”的全新体验 你有没有过这样的经历:在电商App里翻了十几页,还是找不到那件记忆中特别喜欢的连衣裙?或者看到朋友穿了一双小众设计感十足的运…

作者头像 李华
网站建设 2026/4/15 21:03:41

【系统分析师】7.2 软件开发方法与模型

🔧 一、概述:从“蓝图”到“施工方法”软件开发方法与模型是指导团队如何将软件需求系统性地转化为可运行软件产品的 “具体方法论、最佳实践和过程框架” 的集合。如果说软件生命周期定义了项目的“阶段地图”,那么开发方法与模型就是在这张…

作者头像 李华
网站建设 2026/4/16 5:57:58

全任务零样本学习-mT5中文-base参数详解:Top-K=50对中文词汇覆盖影响

全任务零样本学习-mT5中文-base参数详解:Top-K50对中文词汇覆盖影响 1. 这不是普通mT5,是专为中文增强而生的零样本分类增强版 你可能用过mT5,但大概率没用过这个版本——它不叫“mT5中文微调版”,也不叫“轻量中文适配版”&#…

作者头像 李华
网站建设 2026/4/16 5:57:15

使用Prometheus监控FaceRecon-3D服务指标

使用Prometheus监控FaceRecon-3D服务指标 1. 为什么需要为FaceRecon-3D配置专业监控 FaceRecon-3D这类3D人脸重建服务在实际部署中,远不止是“上传一张照片→生成一个模型”这么简单。它背后运行着复杂的深度神经网络,对GPU显存、内存带宽、计算资源都…

作者头像 李华
网站建设 2026/4/16 6:00:25

弦音墨影一文详解:Qwen2.5-VL如何支撑‘千里江山图中点卯式’定位

弦音墨影一文详解:Qwen2.5-VL如何支撑"千里江山图中点卯式"定位 1. 系统概述与核心价值 「弦音墨影」是一款融合人工智能技术与传统美学的视频理解系统,其核心在于将Qwen2.5-VL多模态模型的强大能力,通过水墨丹青的视觉语言呈现给…

作者头像 李华