1.执行顺序
- FROM: 查询从一个或多个表中选择数据。这是查询的基础,确定了数据的来源。
- WHERE: 在数据源(FROM)中应用条件进行筛选。这个步骤可选,但常用于限制返回的行。
- GROUP BY: 根据指定的列对数据进行分组,常与聚合函数一起使用。这样可以将数据划分为不同的组。
- HAVING: 对分组后的数据进行筛选。与WHERE类似,但作用于分组后的结果。
- SELECT: 选择要从结果集中返回的列,这通常包括聚合函数和其他列的计算。
- ORDER BY: 对结果进行排序。这一步在SELECT之后,但在数据返回给客户端之前。
- LIMIT / OFFSET (如果支持): 这些关键字用于限制返回的行数以及返回的起始位置。
- DISTINCT: 这是一个可选的步骤,用于去重结果集中的行。
2.书写顺序
- SELECT: 定义要返回的列或计算的表达式。
- FROM: 指定要查询的数据表或视图。
- WHERE: 对数据进行筛选,使用条件来限制结果集。
- GROUP BY: 根据指定的列对数据进行分组。
- HAVING: 对分组后的数据进行筛选,类似于 WHERE,但作用于分组后的结果。
- ORDER BY: 对结果进行排序。
Sql语句执行顺序为:
(7) SELECT
(8) DISTINCT <select_list>
(1) FROM <left_table>
(3) <join_type> JOIN <right_table>
(2) ON <join_condition>
(4) WHERE <where_condition>
(5) GROUP BY <group_by_list>
(6) HAVING <having_condition>
(9) ORDER BY <order_by_condition>
(10) LIMIT <limit_number>
(7)之后,比如order中,distinct中。
这是因为在SQL执行的时候,WHERE和GROUP语句在字段分类之前就已经执行了,在此期间,别名还没有生效,因此找不到指定别名的字段,报错。