博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL中on条件与where条件的区别
阅读量:4313 次
发布时间:2019-06-06

本文共 1094 字,大约阅读时间需要 3 分钟。

数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。 
在使用
left 
jion时,
on
where
条件的区别如下:
 
1、
on
条件是在生成临时表时使用的条件,它不管
on
中的条件是否为真,都会返回左边表中的记录。
 
2、
where
条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有
left 
join
的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
 
假设有两张表:
 
表1:tab1 id size 1  10 2  20 3  30 表2:tab2 size name 10   AAA 20   BBB 20   CCC  两条SQL:1、select * from tab1 left join tab2 on tab1.size = tab2.size where tab2.name='AAA'2、select * from tab1 left join tab2 on tab1.size = tab2.size and tab2.name='AAA' 第一条SQL的过程:1、中间表on条件: tab1.size = tab2.size tab1.id tab1.size tab2.size tab2.name 1 10 10 AAA 2 20 20 BBB 2 20 20 CCC 3 30 (null) (null) 2、再对中间表过滤where 条件:tab2.name='AAA'tab1.id tab1.size tab2.size tab2.name 1 10 10 AAA  第二条SQL的过程:1、中间表on条件: tab1.size = tab2.size and tab2.name='AAA'(条件不为真也会返回左表中的记录) tab1.id tab1.size tab2.size tab2.name 1 10 10 AAA 2 20 (null) (null) 3 30 (null) (null)
其实以上结果的关键原因就是
left 
join
,
right 
join
,
full 
join
的特殊性,
不管
on
上的条件是否为真都会返回
left
right
表中的记录,
full
则具有
left
right
的特性的并集。 
inner 
jion没这个特殊性,则条件放在
on
中和
where
中,返回的结果集是相同的。

转载于:https://www.cnblogs.com/toSeeMyDream/p/6843984.html

你可能感兴趣的文章
ASP.NET MVC ajax提交 防止CSRF攻击
查看>>
关于CSS伪类选择器
查看>>
适用于带文字 和图片的垂直居中方法
查看>>
Part 2 - Fundamentals(4-10)
查看>>
使用Postmark测试后端存储性能
查看>>
NSTextView 文字链接的定制化
查看>>
第五天站立会议内容
查看>>
CentOs7安装rabbitmq
查看>>
(转))iOS App上架AppStore 会遇到的坑
查看>>
解决vmware与主机无法连通的问题
查看>>
做好产品
查看>>
项目管理经验
查看>>
笔记:Hadoop权威指南 第8章 MapReduce 的特性
查看>>
JMeter响应数据出现乱码的处理-三种解决方式
查看>>
获取设备实际宽度
查看>>
Notes on <High Performance MySQL> -- Ch3: Schema Optimization and Indexing
查看>>
Alpha冲刺(10/10)
查看>>
数组Array的API2
查看>>
为什么 Redis 重启后没有正确恢复之前的内存数据
查看>>
No qualifying bean of type available问题修复
查看>>