日期:2014-05-16  浏览次数:20511 次

inner join和left join的区别

做了这么多年的IT,一直没有机会接触互联网应用、高并发应用,不得不说这是一种遗憾…为了弥补这种遗憾,我开始关注做互联网应用的公司,寻找新的机会。

周二参加了一家公司的技术面试,今天得到回复是不满足岗位需求。但是我没有遗憾,为什么呢?

这是一家投资公司,叫乐博国际投资发展有限公司。说实在的,人事打电话给我的时候,如果不说他们公司主要从事二手车交易平台的研发,我都懒得去面试。也就是说,我是看好二手车交易这个市场前景的。

面试官据说是项目经理,长发飘飘的高个子,面试过程没什么值得说的,没有问道什么出彩的内容。但是有一个问题,可能是我被拒绝的直接原因,关于inner join和left join的区别。

当他问到这个问题时候,我笑了,我说这样的问题还是适合问应届毕业生。他还是坚持让我作答。无奈,说关联方式的区别、执行结果的区别…突然被打断,面试官说:你已经工作四五年了,当我问到基础问题的时候,希望你能提升一个层次回答…我心想,这面试官要求高水平啊。我开始叙述oracle如何实现关联查询...又被打断,面试说:就说说这两者性能上的差异…尼玛,听到这句我傻眼了!他继续说自己的工作中经历,什么inner join查了20多秒,left join查了3秒…我听不下去了,于是纠正他,这是两个不通逻辑实现,怎么能放在一起比较性能呢?说完这句话,我就知道面试结果了。

联合查询的效率,和关联条件、过滤条件有很大关系,具体还要看执行计划做出尽可能的优化,但是,唯独跟join的方式没有关系。一般情况,在使用inner join具体场景中,不能使用left join替换,同样的,使用left join的地方也不能用inner join替换。即便在某些特殊的情况下,inner join和left join返回结果相同,这也仅仅是一种巧合,谁能保证两张表的数据是一直不变的?一旦其中一张表的数据发生CURD,就很容易打破这中巧合。

说到底,inner join和left join是两个完全不同的东西,放在一起比较执行效率,实在没有意义!