关于A left join B,A是否一定是主表?

Posted 水木神舟10

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于A left join B,A是否一定是主表?相关的知识,希望对你有一定的参考价值。

 

一般情况,我们作左连接 select * from A left join B  on A.id=B.a_id;一定认为A就是主表,其实还有另外的情况,我们若将sql改写成 select * from A left join B  on on A.id=B.a_id where B.id<cont(常数)。此时B表就作为连接的主表了。具体示例见下:

新建表 A

 技术分享图片

新建表B

技术分享图片

 1.查询sql

SELECT * FROM A a  LEFT JOIN   B  b ON a.category_id = b.id where b.id<8;此时查看查询计划,显示 b表为主表

 

解释:where v.id<8,筛选出了更小的表B,所以按照left join 小表驱动大表的原则,此时把B表作为主表也不足为奇了。

 

 

 2.查询sql

SELECT * FROM A a  LEFT JOIN   B  b ON a.category_id = b.id where b.id<16;此时查看查询计划,显示 a表为主表

 

解释:where v.id<16,筛选出了的表B有15条>A(里面14条),所以按照left join 小表驱动大表的原则,此时把A表作为主表了。

 

 

 3.查询sql

 

1)SELECT * FROM A a  LEFT JOIN   B  b ON a.category_id = b.id where b.id<14;此时查看查询计划,显示 a表为主表

 

 

2)SELECT * FROM A a  LEFT JOIN   B  b ON a.category_id = b.id where b.id<=14;此时查看查询计划,显示 a表为主表

 

按照我们前面说的小表驱动大表,此时where where b.id<14或者 where where b.id<=14,B表的条数为13或14(A表14条没变),但此时都是以A 。

说明:在2表的连接时候相等记录条数时候有点小bug,具体原因待解决。。。。

 

以上是关于关于A left join B,A是否一定是主表?的主要内容,如果未能解决你的问题,请参考以下文章

Inner Join and Left Join 与条件的结合

Inner Join and Left Join 与条件的结合

SQL中有主外键的两表到底那这是主表

left join 后用 on 还是 where,区别大了!

left join 后用 on 还是 where,区别大了!

关于full join 语句的性能问题 跪求大虾帮忙解决.