sql关键字执行顺序
# sql关键字执行顺序
- FROM:从数据源(表或视图)中选择数据。
- WHERE:对数据进行过滤,应用 WHERE 子句条件。
- GROUP BY:对过滤后的数据进行分组。
- HAVING:对分组后的数据进行过滤(如果有 HAVING 子句)。
- SELECT:选择所需的列并应用聚合函数(如有)。
- DISTINCT:如果使用了
DISTINCT
,会在这个阶段进行去重。 - ORDER BY:对选择的结果集进行排序。
- LIMIT:在排序后的结果集上应用
LIMIT
,以返回指定数量的记录。
因此,GROUP BY
是在 LIMIT
之前执行的。GROUP BY
会在 LIMIT
之前对数据进行分组,然后 LIMIT
只会限制分组后的结果集的记录数。
# 解释:
假设你有一个查询:
sql
复制代码
SELECT r.refund_id, MAX(r.refund_amount)
FROM om_refund r
GROUP BY r.refund_id
ORDER BY r.refund_id ASC
LIMIT 1000;
1
2
3
4
5
6
7
2
3
4
5
6
7
GROUP BY
执行:首先,查询会根据refund_id
对数据进行分组,并计算每组的最大refund_amount
。ORDER BY
执行:然后,查询结果按照refund_id
进行升序排序。LIMIT
执行:最后,查询只返回排序后的前 1000 条记录。
这种顺序意味着,如果你在 GROUP BY
之前的数据集非常大,查询可能会先生成一个庞大的中间结果集,然后再应用 LIMIT
。这在处理大量数据时,可能导致性能问题。
# 总结:
GROUP BY
总是在LIMIT
之前执行。LIMIT
只是限制最终返回的结果集的数量,不能影响分组或排序过程。
上次更新: 2025/01/13, 10:51:06