WHERE 和 HAVING 的关键区别
WHERE 是分组前过滤行,HAVING 是分组后过滤组。题干如果问“筛选订单金额大于100的记录”,通常是 WHERE;如果问“筛选订单数超过10的客户分组”,通常是 HAVING。
HAVING 经常和 GROUP BY、COUNT、SUM、AVG 这类聚合函数一起出现。没有分组和聚合的场景,硬用 HAVING 往往不是考试想要的答案。
| 关键字 | 作用阶段 | 题干信号 |
|---|---|---|
| WHERE | 分组前过滤记录 | 某列满足条件的行 |
| GROUP BY | 按字段分组 | 按客户、部门、课程统计 |
| HAVING | 分组后过滤分组 | COUNT、SUM、AVG 后再筛选 |
| ORDER BY | 结果排序 | 升序、降序、排名展示 |
JOIN 题要看保留哪一边
INNER JOIN 只保留两边能匹配上的记录;LEFT JOIN 会保留左表记录,即使右表没有匹配,也会用空值补齐。题干如果强调“即使没有订单也要显示客户”,这通常是 LEFT JOIN 的信号。
LEFT JOIN 还有一个常见坑:右表条件如果放到 WHERE 里,可能会把右表为空的记录过滤掉,结果看起来像 INNER JOIN。这个点很适合出选择题。
SQL 题别只背语法,要读统计口径
如果题目问“每个部门平均工资超过多少”,你要先分组,再求平均,再用 HAVING 过滤。若题目问“工资大于多少的员工”,就是普通行过滤,用 WHERE 更自然。
SQL 题真正考的是数据处理顺序:先从哪些表来,怎么关联,哪些行留下,怎么分组,分组后再筛选什么。按这个顺序读题,会比死记关键字更稳。
相关题目解析
下面这些题目和本专题的判断方法关联较强,适合读完概念后回到具体题干里校验理解。
- SQL 中 HAVING 和 WHERE 的区别是什么?GROUP BY 与 HAVING / HAVING和WHERE区别
- SQL 中 WHERE 和 HAVING 有什么区别?WHERE 与 HAVING / 数据库系统工程师SQL
- LEFT JOIN 中右表条件放在 WHERE 里为什么可能改变结果?LEFT JOIN / WHERE 条件
- SQL 中 INNER JOIN 主要用来做什么?SQL / INNER JOIN