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

MySQL留疑问:left join时选on还是where?

👉这是一个或许对你有用的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料:

  • 《项目实战(视频)》:从书中学,往事中“练”

  • 《互联网高频面试题》:面朝简历学习,春暖花开

  • 《架构 x 系统设计》:摧枯拉朽,掌控面试高频场景题

  • 《精进 Java 学习指南》:系统学习,互联网主流技术栈

  • 《必读 Java 源码专栏》:知其然,知其所以然

👉这是一个或许对你有用的开源项目

国产Star破10w的开源项目,前端包括管理后台、微信小程序,后端支持单体、微服务架构

RBAC权限、数据权限、SaaS多租户、商城、支付、工作流、大屏报表、ERP、CRMAI大模型、IoT物联网等功能:

  • 多模块:https://gitee.com/zhijiantianya/ruoyi-vue-pro

  • 微服务:https://gitee.com/zhijiantianya/yudao-cloud

  • 视频教程:https://doc.iocoder.cn

【国内首批】支持 JDK17/21+SpringBoot3、JDK8/11+Spring Boot2双版本


前天写SQL时本想通过 A left B join on and 后面的条件来使查出的两条记录变成一条,奈何发现还是有两条。

后来发现 join on and 不会过滤结果记录条数,只会根据and后的条件是否显示 B表的记录,A表的记录一定会显示。

不管and 后面的是A.id=1还是B.id=1,都显示出A表中所有的记录,并关联显示B中对应A表中id为1的记录或者B表中id为1的记录。

运行sql :

select * from student s left join class c on s.classId=c.id order by s.id

运行sql :

select * from student s left join class c on s.classId=c.id and s.name="张三" order by s.id

运行sql :

select * from student s left join class c on s.classId=c.id and c.name="三年级三班" order by s.id

数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。

在使用left jion时,on和where条件的区别如下:

1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

假设有两张表:

表1:tab2

id

size

1

10

2

20

3

30

表2:tab2

size

name

10

AAA

20

BBB

30

CCC

两条SQL:

1、

select * form tab1 left join tab2 on (tab1.size = tab2.size) where tab2.name=’AAA’

2、

select * form tab1 left join tab2 on (tab1.size = tab2.size and tab2.name=’AAA’)

第一条SQL的过程:

1、中间表on条件:

tab1.size = tab2.size

2、再对中间表过滤where 条件:

tab2.name=’AAA’

第二条SQL的过程:

1、中间表on条件:

tab1.size = tab2.size and tab2.name=’AAA’

(条件不为真也会返回左表中的记录)

其实以上结果的关键原因就是left join,right join,full join的特殊性,不管on上的条件是否为真都会返回left或right表中的记录,full则具有left和right的特性的并集。而inner jion没这个特殊性,则条件放在on中和where中,返回的结果集是相同的。


欢迎加入我的知识星球,全面提升技术能力。

👉 加入方式,长按”或“扫描”下方二维码噢

星球的内容包括:项目实战、面试招聘、源码解析、学习路线。

文章有帮助的话,在看,转发吧。 谢谢支持哟 (*^__^*)
http://www.jsqmd.com/news/864349/

相关文章:

  • 终极解决方案:3分钟搞定Windows苹果驱动安装,告别USB网络共享黄叹号!
  • 5分钟快速上手:终极LOL换肤工具国服完整使用指南
  • 长期使用 Taotoken 服务观察其在不同模型间路由切换的平滑度
  • Chrome二维码插件:跨设备链接传输的智能解决方案
  • 从账单明细看Taotoken按Token计费模式的实际清晰度
  • 安徽省池州CPPMSCMP官网报考入口,官方授权双证报考中心 - 众智商学院课程中心
  • 【Lovable前端黄金标准】:基于87万行生产代码分析出的4项可量化体验指标及达标路径
  • 跟着 MDN 学CSS day_6:(伪类和伪元素详解)
  • Adobe Source Sans 3:终极免费开源UI字体完整指南与专业部署方案
  • 云计算 Agent 化转向:从算力到智力,云厂商抢占下一个十年产业制高点!
  • AI专著撰写神器来袭!一键生成20万字专著,附带专业框架和低查重保障!
  • Vue大屏自适应组件深度解析:企业级数据可视化架构设计与最佳实践
  • 初创团队如何利用Taotoken的TokenPlan有效控制AI开发成本
  • 五大处理器架构深度解析与高阶选型指南
  • AI专著生成神器来袭!用AI写专著,20万字专著轻松到手!
  • FlashAttention 反向传播:删掉 O(N²) 的中间结果,怎么还能算对梯度?
  • 安徽省宣城CPPMSCMP官网报考入口,官方授权双证报考中心 - 众智商学院课程中心
  • 意法半导体STM32F407VET6代理商
  • 揭秘AI专著撰写:工具加持,20万字专著快速成型!
  • 工作十年还像新手?这 6 种表现暴露了你只是把 1 年经验用了 10 年
  • 安卓悬浮看图神器 置顶悬浮,随时查看更便捷
  • Windows平台苹果USB网络共享驱动自动化部署方案
  • 安徽省淮北CPPMSCMP官网报考入口,官方授权双证报考中心 - 众智商学院课程中心
  • STM32G431时钟树配置避坑指南:从CubeMX图形化到代码生成的完整流程(蓝桥杯嵌入式备赛)
  • 5个关键技巧:用Source Sans 3打造专业级UI字体系统
  • 安徽省六安CPPMSCMP官网报考入口,官方授权双证报考中心 - 众智商学院课程中心
  • 网盘直链下载助手:八大平台免登录高速下载完整指南
  • 工控机与普通电脑的本质区别:从设计哲学到硬件选型全解析
  • Akebi-GC 实战指南:掌握游戏功能修改与自动化测试技术
  • 如何在OBS Studio中免费使用VST插件:终极音频优化完整指南