SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。
LEFT JOIN(左连接) 返回包括左表中的所有记录和右表中联结字段相等的记录。
即使右表中没有匹配,也从左表返回所有的行。
RIGHT JOIN(右连接)返回包括右表中的所有记录和左表中联结字段相等的记录。
即使左表中没有匹配,也从右表返回所有的行。
示例表:表1和表2
1、LEFT JOIN 例:
注释:王五在表2中没有匹配的记录,所以表2的内容为NULL。
2、RIGHT JOIN例:
注释:表2中所有记录被返回。
扩展资料:
sql语句中left join的效率问题
sql语句中包含数据处理函数(nvl,case when函数);inner joinleft join等关联;排序和分页。
1、首先把排序去掉,速度确实很快,但排序是必须的,这样做只是为了证明排序是很耗资源。2、将nvl,case when等函数去掉,结果速度几乎没有任何改变。
3、将inner join的表去除,速度稍微快了几十毫秒。
4、将left join的表去掉,速度从原来的4秒提高到1秒内。
综合所得,left join才是速度慢的元凶,于是将left join关联关系字段都加为索引,发现速度基本能保持在1秒左右。
结论:left join是相当耗资源的 *** 作,如果关联的字段没有索引的话,速度是很慢的,所以如果有left join的话,最好用索引字段取关联,或者给关联的字段加索引。
参考资料:
百度百科.Left join
百度百科.Right join
把左连接中的left join 修改为right join ,如下:
select * from tableA as a right join tableB as b on a.keyId = b.keyId请试一试,如有疑问,及时沟通!
A表 B表\x0d\x0aaba b\x0d\x0a133 2\x0d\x0a241 4\x0d\x0a\x0d\x0a左连接:\x0d\x0aselect A.*,B.* from A LEFT JOIN B ON A.b=B.b\x0d\x0a结果\x0d\x0a13\x0d\x0a24 1 4\x0d\x0a\x0d\x0a右连接:\x0d\x0aselect A.*,B.* from A RIGHT JOIN B ON A.b=B.b\x0d\x0a结果\x0d\x0a24 1 4\x0d\x0a 3 2\x0d\x0a\x0d\x0a一句话,左连接就是左边全部保留按条件查出右边,右连接就是右边全部保留按条件查出左边欢迎分享,转载请注明来源:内存溢出
评论列表(0条)