SQL中过滤条件放在on和where中的区别
来源:互联网 发布:java实现socket长连接 编辑:程序博客网 时间:2024/06/01 22:58
今天接到蚂蚁金服的电面,问了sql中过滤条件放在on和where中的区别,当时满脑子是inner join,觉得没区别啊。后来才想起来,连接查询除了inner join还有right join,left join。汗呐,当时还是太紧张了。这里做一下记录吧。
join过程可以这样理解:首先两个表做一个笛卡尔积,on后面的条件是对这个笛卡尔积做一个过滤形成一张临时表,如果没有where就直接返回结果,如果有where就对上一步的临时表再进行过滤。下面看实验:
先准备两张表:
先执行inner join:
select * from person p inner join account a on p.id=a.id and p.id!=4 and a.id!=4;
select * from person p inner join account a on p.id=a.id where p.id!=4 and a.id!=4;
结果没有区别,前者是先求笛卡尔积然后按照on后面的条件进行过滤,后者是先用on后面的条件过滤,再用where的条件过滤。
再看看左连接left join
select * from person p left join account a on p.id=a.id and p.id!=4 and a.id!=4;
这下看出来不对了,id为4的记录还在,这是由left join的特性决定的,使用left join时on后面的条件只对右表有效(可以看到右表的id=4的记录没了)
select * from person p left join account a on p.id=a.id where p.id!=4 and a.id!=4;
where的过滤作用就出来了。。。
右连接的原理是一样的。。
到这里就真相大白了inner join中on和where没区别,右连接和左连接就不一样了。
0 0
- SQL中过滤条件放在on和where中的区别
- 联合查询时过滤条件放在ON之后和放在WHERE之后的区别
- SQL中条件放在on后与where后的区别
- MYSQL联表查询LEFT JOIN 中 WHERE条件放在ON条件里和外部的区别
- sql语句中过滤条件where和having的区别
- SQL中on和where条件的区别
- SQL中ON和WHERE条件的区别
- SQL中ON和WHERE条件的区别
- SQL中on条件与where条件的区别
- SQL中on条件与where条件的区别[转]
- SQL中on条件与where条件的区别(转载)
- SQL中on条件与where条件的区别[转]
- SQL中on条件与where条件的区别
- SQL中on条件与where条件的区别
- SQL中on条件与where条件的区别[转]
- SQL中on条件与where条件的区别
- SQL中on条件与where条件的区别
- SQL中on条件与where条件的区别[转]
- Java时间格式转换
- 怎样在C语言中正确的使用随机数函数rand
- 解决Android Studio中Refreshing gradle project时间过长的最简单方法
- 一次Unity-ios崩溃追踪
- find命令
- SQL中过滤条件放在on和where中的区别
- Bzoj 1212: [HNOI2004]L语言(AC自动机+DP)
- sliddingMenu导入的问题解决
- Mac中安装node.js和npm
- c++试验二-输出1000-10000之间,个位和千位相等的所有质数。
- LeetCode 39. Combination Sum
- centos6.8安装 oracle11g 企业版遇到的坑
- introduction to software exploits off-by-one 一字节溢出
- C语言的存储类型