sql inner join 与 left join和right join 执行效率上面有多大差别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql inner join 与 left join和right join 执行效率上面有多大差别?相关的知识,希望对你有一定的参考价值。

我知道执行结果是不同的,现在问在不同情况下用(left join或right join) 和一直用inner join效率上区别多大。。。。 这里的不同情况下用(left join或right join)是指根据不同情况选择left或right查询使结果没null null的前提下。

如果两个表一样大,效率是一样的。
如果两个表的数据量相差很大,那效率上是有区别的。
一般来说,小表去join大表,效率要比大表去join小表高的多。
通常SQL会自动去选择效率好的查询方案。但如果在join之前已经有很多的join,那SQL一般会按join出现的顺序进行查询。
所以写SQL尽量先查询和过滤数据量小的表,再去join大的表。
参考技术A 给个通俗的解释吧.
例表aa
aid atitle
1 a1
2 a2
4 a4
表bb
bid btitle
1 b1
2 b2
3 b3
两个表a,b相连接,要取出id相同的字段
select * from aa inner join bb on aa.aid = bb.bid这是仅取出匹配的数据.
此时的取出的是:
aid atitle bid btitle
1 a1 1 b1
2 a2 2 b2
那么left join 指:
select * from aa left join bb on aa.aid = bb.bid
首先取出a表中所有数据,然后再加上与a,b匹配的的数据
此时的取出的是:
aid atitle bid btitle
1 a1 1 b1
2 a2 2 b2
4 a4 null null
同样的也有right join:select * from aa right join bb on aa.aid = bb.bid
指的是首先取出b表中所有数据,然后再加上与a,b匹配的的数据
此时的取出的是:
aid atitle bid btitle
1 a1 1 b1
2 a2 2 b2
null null 3 b3本回答被提问者和网友采纳
参考技术B 在用大量数据情况下,left join 和right join 效率要比inner join要高,相当于交集和并集的关系,left join和right join 效率差不多的! 参考技术C left join 比inner join 效率高 参考技术D 这3个的差别不是执行效率上的 而是结果会有不同 再理解下吧

inner join 与 left join 之间的区别

一、sql的left join 、right join 、inner join之间的区别

  left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 
  right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
  inner join(等值连接) 只返回两个表中联结字段相等的行

举例如下: 

--------------------------------------------
表A记录如下:
aID     aNum
1     a20050111
2     a20050112
3     a20050113
4     a20050114
5     a20050115

表B记录如下:
bID     bName
1     2006032401
2     2006032402
3     2006032403
4     2006032404
8     2006032408

--------------------------------------------
1.left join
sql语句如下: 
select * from A
left join B 
on A.aID = B.bID

结果如下:
aID     aNum     bID     bName
1     a20050111    1     2006032401
2     a20050112    2     2006032402
3     a20050113    3     2006032403
4     a20050114    4     2006032404
5     a20050115    NULL     NULL

(所影响的行数为 5 行)
结果说明:
left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.
换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).
B表记录不足的地方均为NULL.
--------------------------------------------
2.right join
sql语句如下: 
select * from A
right join B 
on A.aID = B.bID

结果如下:
aID     aNum     bID     bName
1     a20050111    1     2006032401
2     a20050112    2     2006032402
3     a20050113    3     2006032403
4     a20050114    4     2006032404
NULL     NULL     8     2006032408

(所影响的行数为 5 行)
结果说明:
仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.
--------------------------------------------
3.inner join
sql语句如下: 
select * from A
innerjoin B 
on A.aID = B.bID

结果如下:
aID     aNum     bID     bName
1     a20050111    1     2006032401
2     a20050112    2     2006032402
3     a20050113    3     2006032403
4     a20050114    4     2006032404

结果说明:
很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.
 

以上是关于sql inner join 与 left join和right join 执行效率上面有多大差别?的主要内容,如果未能解决你的问题,请参考以下文章

sql中left joinright join与inner join的区别

sql inner join 与 left join和right join 执行效率上面有多大差别?

sql语句中left join和inner join中的on与where的区别分析

sql中 INNER JOIN LEFT JOIN RIGHT JOIN FULL JOIN 中 ON与Where的区别

sql中 INNER JOIN LEFT JOIN RIGHT JOIN FULL JOIN 中 ON与Where的区别

sql中的inner join ,left join ,right join