最近发现只要理清sql语句生成的虚拟表顺序其实就比较容易分析很多需求
首先mysql的关键字生成顺序:
- from 和 joins—>生成一张虚拟表a
- where -------->生成一张虚拟表b
- group by ----->where 生成的虚拟表根据group by后的字段分组生成一张虚拟表c
- having-------->根据虚拟表c进行条件筛选,如某个字段p>10000,生成虚拟表d
- select---------->根据虚拟表d筛选出需要的字段,生成虚拟表e
- Distinct-------->对数据行进行去重,生成虚拟表f
- order by------>根据虚拟表f按照order by后的字段排序生成虚拟表g
- limit ------------>根据虚拟表g截取出部分数据