【MySQL】MySQL-SQL语句执行顺序

SQL的执行顺序与书写顺序是有较大的不同的,二者不能混为一谈,接下来主要谈一下参数的执行顺序以及其中涉及的一些细节。

SQL的书写顺序:
select -> distinct -> from -> join -> on -> where -> group by -> having -> order by -> limit

SQL的执行顺序:
from -> on -> join -> where -> group by -> having -> select -> distinct -> order by -> limit

from

获取待查询数据涉及的相关表,假设一张表为 表1 另一张表为 `表2` ,`表1` 与 `表2` 做笛卡尔积,生成一张
`中间表1`.

on

筛选条件 或者 关联条件,基于 form 中得到的 `中间表1` 筛选符合条件的数据,生成 `中间表2`.

join

表连接,根据连接方式的不同,选择如何在 `中间表2` 中添加外部行,left join 就是把 左表 中被筛除掉的
数据重新添加到 `中间表2` 中,并生成 `中间表3`;right join 和 inner join 同理。

where

筛选 `中间表3` 中的数据生成 `中间表4`,执行顺序:自上到下、自左到右。
注: 对数据库记录生效。
  无法对聚合结果生效。
  可过滤掉最大记录数的条件必须写在 where 子句末尾。
  不支持聚合函数(sum、count、max、avg)。

group by

根据聚合键(自定义字段)进行分组,即在 `中间表4` 的基础上生成 `中间表5`。
注:过滤条件尽可能在 where 中执行,尽量避免在后序的 having 中进行过滤。

having

对分组进行筛选,在 `中间表5` 的基础上生成` 中间表6`。支持聚合函数(sum、count、max、avg)

select

选择字段,对 `中间表6` 的字段进行选取,生成 `中间表7`。

distinct

对 `中间表7` 进行去重处理,生成 `中间表8`。

order by

按照排序键对 `中间表8` 中的记录进行排序,生成 `中间表9`。
注:执行顺序为从左到右。

limit

对 `中间表9` 进行分页处理,截取目标记录组,生成 `中间表10`。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值