mysql

SQL 的执行顺序

原始表 ↓ FROM (获取数据源) ↓ ON (筛选连接前的行) ↓ JOIN (生成连接表) ↓ WHERE (过滤行) ↓ GROUP BY (分组) ↓ HAVING (过滤分组) ↓ SELECT (计算列、聚合、别名) ↓ DISTINCT (去重) ↓ ORDER BY (排序) ↓ LIMIT (限制行数) ↓ 最终结果 FROM – 确定数…

1 阅读

原始表 ↓ FROM (获取数据源) ↓ ON (筛选连接前的行) ↓ JOIN (生成连接表) ↓ WHERE (过滤行) ↓ GROUP BY (分组) ↓ HAVING (过滤分组) ↓ SELECT (计算列、聚合、别名) ↓ DISTINCT (去重) ↓ ORDER BY (排序) ↓ LIMIT (限制行数) ↓ 最终结果

FROM – 确定数据源表

ON – 筛选连接前的行(对 JOIN 而言)

JOIN – 执行连接操作,生成虚拟表

WHERE – 对连接后的行进行过滤

GROUP BY – 将行分组

HAVING – 对分组后的结果进行过滤

SELECT – 选择列、计算表达式、聚合函数

DISTINCT – 去除重复行

ORDER BY – 排序

LIMIT / OFFSET – 限制返回行数

注意:ON 只对 JOIN 有效,WHERE 则在连接完成后整体过滤。SELECT 中的列别名通常无法在 WHERE / GROUP BY / HAVING 中使用,因为它们在 SELECT 之后才生成。

WHERE和ON区别:ON 的过滤发生在连接前,而 WHERE 发生在连接后。

WHERE 和 HAVING 的区别: WHERE 过滤行,在分组前;HAVING 过滤分组,在 GROUP BY 后,可使用聚合函数。

正在加载评论…