当前位置: 首页 > backend >正文

SQL中的LEFT JOIN

下面把这条语句拆成 5 个层次,逐句、逐词、逐字节地解释 LEFT JOIN 到底做了什么,以及为什么“左边”(Employees)会出现,而“右边”(EmployeeUNI)有可能缺失。


  1. 语法骨架
SELECT EmployeeUNI.unique_id, Employees.name
FROM   Employees
LEFT JOIN EmployeeUNION Employees.id = EmployeeUNI.id;
  • SELECT … 决定最终列:
    只要两列:EmployeeUNI 里的 unique_id 与 Employees 里的 name。
  • FROM Employees 先声明“左表”——一切数据行的起点。
  • LEFT JOIN EmployeeUNI ON … 把 EmployeeUNI 挂到 Employees 上,但以左表为准,哪怕右表没有匹配行,也要把左表行保留。

  1. 语义一句话

把 Employees 表里的所有人都拿出来;如果某位员工在 EmployeeUNI 表里有 unique_id,就一并带上;如果没有,unique_id 填 NULL。


  1. 执行顺序(逻辑上)
  2. 先读 Employees 的每一行。
  3. 拿着当前行的 id 去 EmployeeUNI 找同 id 的行。
    • 找到 0 行 → unique_id 填 NULL,仍保留左行。
    • 找到 1 行 → 把右行字段拼上去。
    • 找到 n 行 → 左行复制 n 份,每份拼接不同的右行。
  4. 最终投影 SELECT 的两列。

  1. 与 INNER JOIN 的差别(图示)

假设两表数据:

Employees

idname
1Alice
2Bob
3Carol

EmployeeUNI

idunique_id
1A-100
3C-300
  • LEFT JOIN 结果
    左表 3 行全部保留,Bob 没有 unique_id → NULL

    unique_idname
    A-100Alice
    NULLBob
    C-300Carol
  • INNER JOIN 结果
    只保留两边都有匹配的行 → Bob 消失

    unique_idname
    A-100Alice
    C-300Carol

  1. 常见疑问 & 陷阱
问题解释
为什么写 LEFT JOIN 而不是 LEFT OUTER JOINOUTER 可省略,语义一样。
会不会把 EmployeeUNI 中多余的 id 也带进来?不会。若右表有多条匹配,会把左行复制多份;若右表 id 不在 Employees 里,这些行永远不会出现。
右表列重名怎么办?用表别名或列别名:SELECT eu.unique_id AS uid, e.name …
性能注意点连接列(id)最好都是主键或索引,避免全表扫描。

一句话总结
LEFT JOIN 的核心是“左表为王”:先把 Employees 的所有人拿出来,再尝试从 EmployeeUNI 取 unique_id;取不到也留人,取得到就拼在一起。

http://www.xdnf.cn/news/16722.html

相关文章:

  • (转)mybatis和hibernate的 缓存区别?
  • “物联网+技校”:VR虚拟仿真实训室的发展前景
  • Python深度解析与爬虫进阶:从理论到企业级实践
  • 微信小程序转Vue2组件智能提示词
  • 汇川ITS7100E触摸屏交互界面开发(一)调试事项说明
  • 把上次做的图片的API改成国内版,让图片返回速度提升一个档次
  • 基于python大数据的招聘数据可视化及推荐系统
  • 解决VScode加载慢、保存慢,git加载慢,windows11系统最近异常卡顿的问题
  • [css]切角
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘plotly’问题
  • 常见的中间件漏洞如tomcat,weblogic,jboss,apache靶场攻略
  • 机器人学和自动化领域中的路径规划方法
  • 前端工程化包管理器:从npm基础到nvm多版本管理实战
  • 【大模型理论篇】跨语言AdaCOT
  • 详解Vite 配置中的代理功能
  • 企业级部署 (基于tomcat与nginx)
  • SQL理解——INNER JOIN
  • 7月31日作业
  • 大数据之Hive
  • SpringBoot3.x入门到精通系列:1.2 开发环境搭建
  • 本地部署VMware ESXi,并实现无公网IP远程访问管理服务器
  • Linux 服务器性能优化:性能监控,系统性能调优,进程优先级,内核升级全解析
  • Maven 与单元测试:JavaWeb 项目质量保障的基石
  • 银河麒麟桌面操作系统:自定义截图快捷键操作指南
  • 云计算一阶段Ⅱ——3. Linux 计划任务管理
  • TypeScript 基础介绍(二)
  • 使用python写一套完整的智能体小程序
  • Linux网络-------3.应⽤层协议HTTP
  • 智慧物流分拣误检率↓85%!陌讯轻量化部署算法在动态包裹检测的落地实践
  • Winform PathGradientBrush类使用