SQL语句单表查询的执行顺序
FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> DISTINCT -> ORDER BY -> LIMIT/OFFSET
- FROM
- 作用:确定数据来源的表。
- 示例:
FROM users表示从users表读取数据。
- WHERE
- 作用:过滤符合条件的行(在分组前过滤数据)。
- 示例:
WHERE age > 18仅保留年龄大于 18 的行。 - 限制:不能使用聚合函数(如
SUM、COUNT)。
- GROUP BY
- 作用:对数据进行分组,通常与聚合函数配合使用。
- 示例:
GROUP BY city将数据按城市分组。
- HAVING
- 作用:过滤分组后的结果(在分组后过滤数据)。
- 示例:
HAVING COUNT(*) > 10仅保留分组后行数超过 10 的组。 - 允许使用聚合函数:如
SUM,AVG,COUNT等。
- SELECT
- 作用:选择最终输出的列,可定义别名或使用表达式。
- 示例:
SELECT name, AVG(score) AS avg_score。 - 注意:此时才计算字段别名(如
avg_score),因此后续步骤(如ORDER BY)可用别名,但之前的步骤(如WHERE、GROUP BY)不可用。
- DISTINCT
- 作用:去除重复行。
- 示例:
SELECT DISTINCT city返回唯一的城市列表。
- ORDER BY
- 作用:对结果排序。
- 示例:
ORDER BY avg_score DESC按平均分降序排列。 - 允许使用别名:如
avg_score。
- LIMIT / OFFSET
- 作用:限制返回的行数或跳过指定行。
- 示例:
LIMIT 10 OFFSET 5跳过前 5 行,返回接下来的 10 行。
浙公网安备 33010602011771号