(Mysql)MySQL 查询执行顺序总结
在 MySQL 中,SQL 查询语句的书写顺序和数据库内部执行顺序并不完全相同。理解执行顺序有助于优化查询和写出高效 SQL。
一、SQL 常见书写顺序
SELECT column_list
FROM table_list
WHERE conditions
GROUP BY grouping_columns
HAVING group_conditions
ORDER BY ordering_columns
LIMIT number;
注意:这是书写顺序,数据库内部执行顺序不同。
二、MySQL 内部执行顺序(十步法)
-
FROM
-
确定查询的表或视图
-
生成原始数据集
-
-
JOIN / ON
-
处理表连接
-
根据 ON 条件筛选连接行
-
-
WHERE
-
对 FROM / JOIN 后的数据进行行级过滤
-
只保留满足条件的记录
-
-
GROUP BY
-
对 WHERE 过滤后的数据进行分组
-
为聚合函数(SUM、COUNT 等)提供基础
-
-
HAVING
-
对分组后的结果进行聚合条件过滤
-
WHERE 无法处理聚合条件
-
-
SELECT
-
选择需要返回的列
-
执行表达式计算、聚合函数等
-
-
DISTINCT
-
去掉重复记录
-
-
ORDER BY
-
对最终结果进行排序
-
-
LIMIT / OFFSET
-
截取指定数量或范围的结果
-
-
结果返回客户端
三、关键注意点
-
WHERE vs HAVING:
-
WHERE:分组前行过滤 -
HAVING:分组后聚合过滤
-
-
JOIN 的 ON vs WHERE:
-
ON → 连接条件,影响连接结果
-
WHERE → 连接后过滤整个结果集
-
-
执行顺序 ≠ 写法顺序:
-
SQL 写法更符合人类思维
-
数据库优化器可能调整执行顺序,但逻辑上遵循上述流程
-
四、记忆技巧
可以用一句话串起来记:
“先找表(FROM)、连表(JOIN/ON)、过滤行(WHERE)、分组(GROUP BY)、过滤组(HAVING)、选列(SELECT)、去重(DISTINCT)、排序(ORDER BY)、截取(LIMIT)、最后返回。”
