开心一刻
我:嗨,老板娘,有冰红茶没
老板娘:有
我:多少钱一瓶
老板娘:3块
我:给我来一瓶,给,3块
老板娘:来,你的冰红茶
我:玩呐,我要冰红茶,你给我个瓶盖干哈?
老板娘:这是再来一瓶,我家卖完了,你去隔壁家换一下
问题背景
对于 MySQL 的 JOIN,不知道大家有没有去想过他的执行流程,亦或有没有怀疑过自己的理解(自信满满的自我认为!);如果大家不知道怎么检验,可以试着回答如下的问题
驱动表的选择
MySQL 会如何选择驱动表,按从左至右的顺序选择第一个?
多表连接的顺序
假设我们有 3 张表:A、B、C,和如下 SQL
-- 伪 SQL,不能直接执行 A LEFT JOIN B ON B.aId = A.id LEFT JOIN C ON C.aId = A.id WHERE A.name = '666' AND B.state = 1 AND C.create_time > '2019-11-22 12:12:30'
是 A 和 B 联表处理完之后的结果再和 C 进行联表处理,还是 A、B、C 一起联表之后再进行过滤处理 ,还是说这两种都不对,有其他的处理方式 ?
ON、WHERE 的生效时机
楼主无意之间逛到了一篇博文,它里面有如下介绍
正经图1 摘自 Mysql - JOIN详解
看完这个,楼主第一时间有发现新大陆的感觉,原来 JOIN 的执行顺序是这样的(不是颠覆了楼主之前的认知,因为楼主之前就没想过这个问题,而是有种新技能获取的满足),可后面越想越不对&#