SQL 运行流程
根据 ChatGPT,在一个查询语句运行时,可以在逻辑上认为 SQL 是按照这样的顺序在取数据:
- 数据源 FROM
- 限定条件 WHERE
- 分组 GROUP BY
- 分组限定条件 HAVING
- 窗口函数(包括聚合函数)
- 列投影 SELECT
- 去重 DISTINCT
- 排序 ORDER BY
- 限制范围 OFFSET / LIMIT
例如如下的语句:
SELECT DISTINCT
dept,
AVG(salary) AS avg_salary,
RANK() OVER (ORDER BY AVG(salary) DESC) AS rk
FROM Employee
WHERE age >= 18
GROUP BY dept
HAVING COUNT(*) >= 5
ORDER BY avg_salary DESC
LIMIT 10;
就可以理解为:
- 从 Employee 表取数据
- 限定
age列的值要 \ge 18 - 按
dept的取值分组 - 限定
dept的条件是查询数大于等于 5 - 计算聚合函数
AVG(salary)和窗口函数RANK - 取对应的列
- 去重
- 按
avg_salary降序排序 - 限制只显示 10 个
BEYOND THE ARTICLE
读完了,有什么想法?
阅读已保存的问答示例,并循着引用回到原文。
— 本文完 — 返回文章列表