一、mySql的执行顺序
mysql执行sql的顺序从 From 开始,以下是执行的顺序流程
1、FROM table1 left join table2 on 将table1和table2中的数据产生笛卡尔积,生成Temp1
2、JOIN table2 所以先是确定表,再确定关联条件
3、ON table1.column = table2.columu 确定表的绑定条件 由Temp1产生中间表Temp2
4、WHERE 对中间表Temp2产生的结果进行过滤 产生中间表Temp3
5、GROUP BY 对中间表Temp3进行分组,产生中间表Temp4
6、HAVING 对分组后的记录进行聚合 产生中间表Temp5
7、SELECT 对中间表Temp5进行列筛选,产生中间表 Temp6
8、DISTINCT 对中间表 Temp6进行去重,产生中间表 Temp7
9、ORDER BY 对Temp7中的数据进行排序,产生中间表Temp8
10、LIMIT 对中间表Temp8进行分页,产生中间表Temp9
MySQL执行顺序流程
https://blog.csdn.net/csndhu/article/details/88176564
https://www.cnblogs.com/ggjucheng/archive/2012/11/11/2765237.html
https://www.cnblogs.com/yyjie/p/7788428.html
-- 原始记录1-300,结果为1-200 301-400
-- where的执行顺序在select之前,所以会先执行 rank <=300 会把rank里面所有的记录都保留了,然后按照规则进行排序
select
series_id,
series_name,
case
when rank <= 200 then rank -- 1-200
else rank + 100 end as rank -- 400-700
from
dm_autocar.autocar_series_top300
where
date = '20191031'
and rank <= 300
条件写到里面与条件写到外面是一样:
一:先写500,再限定条件:先从中选出500,再筛选条件
二:写500并加限定条件:先从选出500,接着再从500中筛选条件
select
series_id,
series_name,
rank_id
from
series_top500
where
max_price <= 260
and series_type <> 4
and brand_level <> 0
https://data.bytedance.net/dorado/development/node/100109838?project=cn_105&version=-1