sql执行顺序from,on,join。参考文章
有两个表posts 10000条数据,post_slugs 14条记录,posts,两个表通过post_id关联。使用mysql
SELECT * from posts,post_slugs where post_slugs.post_id=posts.post_id
,按sql执行顺序,from之后是两个表的迪卡尔积,因此where条件实际操作的数据应该是10000X14条记录。
SELECT * from posts join post_slugs on post_slugs.post_id=posts.post_id
按sql执行顺序,from读取posts表的数据生成虚表T1,在根据on条件读取post_slugs满足条件的数据生成虚表T2,再根据join方式,插入需要保留的数据,那实际上join之后的数据量应该是14条记录。
但是,实际上两条语句执行时间没有什么差异。这是因为mysql优化器处理了还是说执行顺序理解有误?
join 有 left join,right join,inner join ;
join就是inner join这个是内链接
inner join和where运行结果是一样的 除非是用left join,right join所产生的结果才不一样 就是一那个为主表查询如
A left join B ON a.id = b.id
这里就是A为主表 A表的数据都会查询查询出来