mysql left join on vs where筛选差异详解
25 浏览量
更新于2024-08-31
收藏 54KB PDF 举报
本文将深入解析MySQL左连接(LEFT JOIN)和右连接(RIGHT JOIN)在使用ON与WHERE关键字进行筛选时的区别。通常,当我们使用JOIN操作连接两个或更多表时,ON和WHERE都用于指定连接条件,但它们的作用时机和查询逻辑有所不同。
在SQL查询中,ON关键字用于定义JOIN操作的连接条件,它是在执行JOIN操作之前确定哪些行应该被匹配。在LEFT JOIN和RIGHT JOIN中,ON语句确保左表(默认是左表)的所有记录都会被包含在结果集中,即使在右表中没有匹配的记录。如果在ON中设置了筛选条件,如`A.ID = B.ID and B.ID < 3`,这意味着只有当B表中的ID小于3时,才会将A表的行与B表的行关联起来。
相比之下,WHERE关键字是在JOIN操作完成之后对结果集进行过滤的。当你在LEFT JOIN的WHERE子句中使用条件,如`WHERE B.ID < 3`,这实际上是在已经进行了LEFT JOIN的基础上,进一步筛选剩余的行,可能会排除掉部分原本匹配的行,因为JOIN操作已经基于ON条件进行了初步的筛选。
回到提供的例子,语句一:
```sql
SELECT A.ID as AID, B.ID as BID FROM A LEFT JOIN B ON A.ID = B.ID WHERE B.ID < 3
```
这个查询首先执行LEFT JOIN,将所有A表的记录与B表中ID小于3的记录匹配,然后应用WHERE子句进一步过滤B表的结果。
而语句二:
```sql
SELECT A.ID as AID, B.ID as BID FROM A LEFT JOIN B ON A.ID = B.ID AND B.ID < 3
```
这里,AND运算符放在了ON子句中,这意味着筛选条件`B.ID < 3`成为连接条件的一部分,这实际上改变了JOIN操作的方式,可能导致某些在满足B表ID小于3的情况下,因A表没有对应ID而无法连接的行被排除在结果之外。
因此,尽管表面上看起来两个查询可能相似,但由于WHERE和ON的位置不同,它们的实际效果和返回结果是有区别的。在实际使用时,理解并正确运用ON和WHERE的关键字对于确保得到预期结果至关重要。
2021-10-27 上传
2020-12-15 上传
2021-01-19 上传
2023-08-19 上传
2023-05-20 上传
2023-09-08 上传
2023-09-16 上传
2023-05-17 上传
2024-05-08 上传
weixin_38653664
- 粉丝: 8
- 资源: 951
最新资源
- 火炬连体网络在MNIST的2D嵌入实现示例
- Angular插件增强Application Insights JavaScript SDK功能
- 实时三维重建:InfiniTAM的ros驱动应用
- Spring与Mybatis整合的配置与实践
- Vozy前端技术测试深入体验与模板参考
- React应用实现语音转文字功能介绍
- PHPMailer-6.6.4: PHP邮件收发类库的详细介绍
- Felineboard:为猫主人设计的交互式仪表板
- PGRFileManager:功能强大的开源Ajax文件管理器
- Pytest-Html定制测试报告与源代码封装教程
- Angular开发与部署指南:从创建到测试
- BASIC-BINARY-IPC系统:进程间通信的非阻塞接口
- LTK3D: Common Lisp中的基础3D图形实现
- Timer-Counter-Lister:官方源代码及更新发布
- Galaxia REST API:面向地球问题的解决方案
- Node.js模块:随机动物实例教程与源码解析