SQL执行顺序

SELECT * FROM user LEFT JOIN order ON user.id = order.uid 
WHERE order.price > 1000 
GROUP BY user.name 
HAVING count(1) > 5 
ORDER BY user.name 
LIMIT 0,10;

执行顺序:
1. FROM : 如果FROM 后面是1张表,那么直接返回该表的全体。如果是2张表及其以上,返回的则是这几张表的。 最终形成的结果暂存到一张虚拟表 virtualTable1中。

2. ON: 按照ON所对应的条件,对virtualTable1表中的内容进行过滤。生成另外一张虚拟表 virtualTable2中。

3. LEFT JOIN: 在virtualTable2中,已左表为模板,保留左表的记录。 生成另外一张虚拟表 virtualTable3。

4. WHERE: 在virtualTable3的基础上,执行where条件的过滤条件{condition_1, condition_2, ... , condition_n}。每个condition_i的过滤,都会在前一张表的基础上生成一张新的虚拟表virtualTable_i。 最终过滤完成后的虚拟表我们表示为virtualTable4。

5. GROUP BY:对virtualTable4按照对应的条件进行分组操作,结果存放在virtualTable5中。

6. HAVING: 对virtualTable5中的记录进行过滤,结果存放在virtualTable6中。

// 以上6步对行记录的筛选进行完毕。以下对列记录进行筛选。

7. SELECT: 对virtualTable6记录进行选取,形成virtualTable7。

8. 如果SELECT语句中有DISTINCT等条件,还会根据该条件过滤掉virtualTable7中重复的行后生成virtualTable8。

9. ORDER BY: 对virtualTable8的记录进行排序(注意这一步并不会额外创建一张虚拟表),它排序的结果会生成一个cursor(游标)。

10. LIMIT: cursor会按照limit的取值范围选取virtualTable8中对应的行生成virtualTable9返回。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值