在SQL中,合理使用 ORDER BY、GROUP BY、BETWEEN AND 及其他过滤条件,需明确它们的用途和执行顺序。以下是详细总结:
1. ORDER BY
- 用途:对查询结果按指定字段排序(升序
ASC或降序DESC)。 - 使用场景:
- 需要排序结果时,如排行榜、时间线等。
- 通常位于SQL语句末尾,执行顺序在
SELECT之后。
- 示例:
SELECT name, score FROM students ORDER BY score DESC;
2. GROUP BY
- 用途:将数据按指定字段分组,常与聚合函数(
SUM、AVG、COUNT等)配合生成汇总数据。 - 使用场景:
- 统计分组数据,如“每个部门的平均工资”。
SELECT后的字段必须是分组字段或聚合函数。
- 示例:
SELECT department, AVG(salary) FROM employees GROUP BY department;
3. BETWEEN AND
- 用途:过滤指定范围内的值(包含边界)。
- 使用场景:
- 替代
>=和<=组合,提升可读性。 - 可用于
WHERE或HAVING子句。
- 替代
- 示例:
SELECT * FROM orders WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31';
4. 其他过滤条件
- WHERE:分组前过滤行,不可直接使用聚合函数。
SELECT * FROM products WHERE price > 100; - HAVING:分组后过滤组,需搭配聚合函数。
SELECT department, AVG(salary) FROM employees GROUP BY department HAVING AVG(salary) > 5000; - LIKE/IN/IS NULL:用于模式匹配、多值匹配或空值检查。
SELECT name FROM users WHERE email IS NULL;
执行顺序与组合使用
-
执行顺序:
FROM→WHERE→GROUP BY→HAVING→SELECT→ORDER BY -
典型组合示例:
SELECT department, AVG(salary) AS avg_salary FROM employees WHERE hire_date > '2020-01-01' -- 先过滤行 GROUP BY department -- 再分组 HAVING AVG(salary) > 5000 -- 后过滤组 ORDER BY avg_salary DESC; -- 最后排序
关键区别
- WHERE vs HAVING:
WHERE过滤行(分组前),HAVING过滤组(分组后,可含聚合函数)。 - GROUP BY vs ORDER BY:
GROUP BY影响数据分组,ORDER BY影响最终排序。
通过理解这些关键字的用途和执行顺序,可高效编写逻辑清晰的SQL查询,满足不同数据操作需求。