SQL执行顺序
- from
- join
- on
- where
- group by(开始使用select中的别名,后面的语句中都可以使用)
- avg,sum等
- having
- select
- distinct
- order by
- limit
执行语句都是由from开始的,当前步骤会为下一步骤生成一个虚拟表,这个虚拟表作为下个执行步骤的输入。
mysql的执行顺序
1、select语句的定义
一个select子句可以包含以下几个部分,顺序固定,例如group by子句不会位于where子句前面。
<SELECT clause> [<FROM clause>] [<WHERE clause>] [<GROUP BY clause>] [<HAVING clause>] [<ORDER BY clause>] [<LIMIT clause>]
2、查询语句的执行顺序
执行顺序:
开始->from->where->groupby->having->order by->select->limit->最终结果
每个子句执行后都会产生一个中间结果供接下来的句子使用,如果不存在某个子句就跳过
例子:
select 考生姓名, max(总成绩) as max总成绩
from tb_Grade
where 考生姓名 is not null
group by 考生姓名
having max(总成绩) > 600
order by max总成绩
在上面示例中的SQL执行顺序如下:
(1)首先执行from子句,从tb_Grade表组装数据源的数据 。
(2)执行where子句,筛选tb_Grade表中所有数据不为NULL的数据。
(3)执行GROUP BY 子句,把tb_Grade表按"学生姓名"列进行分组。
(4)计算max()聚集函数,按“总成绩”求出总成绩中最大的数值。
(5)执行having子句,筛选课程总成绩大于600分。
(6)执行order by子句,把最后的结果按照“Max成绩”进行排序。