计算机

SQL 运行流程

根据 ChatGPT,在一个查询语句运行时,可以在逻辑上认为 SQL 是按照这样的顺序在取数据:

  1. 数据源 FROM
  2. 限定条件 WHERE
  3. 分组 GROUP BY
  4. 分组限定条件 HAVING
  5. 窗口函数(包括聚合函数)
  6. 列投影 SELECT
  7. 去重 DISTINCT
  8. 排序 ORDER BY
  9. 限制范围 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;

就可以理解为:

  1. 从 Employee 表取数据
  2. 限定 age 列的值要 \ge 18
  3. 按 dept 的取值分组
  4. 限定 dept 的条件是查询数大于等于 5
  5. 计算聚合函数 AVG(salary) 和窗口函数 RANK
  6. 取对应的列
  7. 去重
  8. 按 avg_salary 降序排序
  9. 限制只显示 10 个
BEYOND THE ARTICLE

读完了,有什么想法?

阅读已保存的问答示例,并循着引用回到原文。

查看公开问答示例
— 本文完 — 返回文章列表