如何用嵌套循环理解多表关联SQL查询的执行逻辑?
用嵌套循环理解该SQL的执行流程
先把原SQL整理如下:
SELECT a.column1,b.column2,c.column FROM table1 a JOIN table2 b ON a.id = b.id JOIN table3 c ON b.id = c.id WHERE a.some_condition = 'value' AND b.another_condition = 123 AND c.yet_another_condition > 456;
把这个多表关联查询拆解成三层嵌套循环来理解,执行顺序如下:
外层循环:遍历过滤后的table1数据
- 先从
table1中筛选出满足a.some_condition = 'value'的所有行,这是外层循环的数据源。 - 外层循环每次取出一行
table1的记录(记为a),进入中层循环。
- 先从
中层循环:匹配table2的关联数据
- 针对当前的
a行,在table2中查找同时满足两个条件的行:- 关联条件:
b.id = a.id - 过滤条件:
b.another_condition = 123
- 关联条件:
- 中层循环每次取出一行符合条件的
table2记录(记为b),进入内层循环。
- 针对当前的
内层循环:匹配table3的关联数据并生成结果
- 针对当前的
b行,在table3中查找同时满足两个条件的行:- 关联条件:
c.id = b.id - 过滤条件:
c.yet_another_condition > 456
- 关联条件:
- 每找到一行符合条件的
table3记录(记为c),就把a.column1、b.column2、c.column这三个字段的值组合成结果集中的一行。
- 针对当前的
整个过程就是外层循环遍历符合条件的table1数据,每一条table1数据触发中层循环找匹配的table2数据,每一条匹配的table2数据再触发内层循环找匹配的table3数据,找到一组匹配的a、b、c就生成一条结果行。
内容的提问来源于stack exchange,提问作者Richa Sharma
相关产品推荐
相关产品推荐

