查询子句顺序
SQL 查询子句的书写顺序是什么?
SELECT -> FROM -> WHERE -> GROUP BY -> HAVING -> ORDER BY
- SELECT: 要输出的属性;
- FROM: 数据来源;
- WHERE: 元组级过滤;
- GROUP BY: 分组;
- HAVING: 分组级过滤;
- ORDER BY: 排序;
一句完整查询里各子句出现在哪里?
SELECT studioName, SUM(length) AS total
FROM Movies
WHERE year >= 1990
GROUP BY studioName
HAVING SUM(length) > 500
ORDER BY total DESC;
- 顺序核对: SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY;
各子句的作用时机可以从哪里看出来?
- WHERE 只看到单个元组, 因此不能写聚集条件;
- HAVING 作用于 GROUP BY 之后, 因此可以写聚集条件, 见 分组与 HAVING;
- ORDER BY 在最后执行, 因此可以按最终结果的列排序, 见 排序与表达式;
(source: 050-sql.md §全关系操作/§SQL 查询子句顺序)