版权声明:本文为博主原创文章欢迎转载和交流,转载请注明来源^^ /u/article/details/
今天接到蚂蚁金服的电面问了sql中过滤条件放在on和where中的区别,当时满脑子是inner join觉得没区别啊。后来才想起来连接查询除了inner join还有right join,left join汗呐,当时还是太紧张了这里做一下记录吧。
join过程可以这样理解:首先两个表做一个笛卡尔积on后面的條件是对这个笛卡尔积做一个过滤形成一张临时表,如果没有where就直接返回结果如果有where就对上一步的临时表再进行过滤。下面看实验:
这下看出来不对了id为4嘚记录还在,这是由left join的特性决定的使用left join时on后面的条件只对右表有效(可以看到右表的id=4的记录没了)
where的过滤作用就出来了。。右连接的原理是一样的。
到这里就真相大白了inner join中on和where没区别右连接和左连接就不一样了。