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的区别