数据库系统工程师 · SQL · 条件与连接

SQL 中 WHERE、HAVING 和 JOIN 怎么区分?

SQL 题很多时候不是考你能不能写完整查询,而是考你知道条件应该放在哪一步。WHERE、GROUP BY、HAVING、JOIN 的执行语义一混,选项就会看起来都像对的。

数据库专题 软考题库编辑部 持续更新

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 题真正考的是数据处理顺序:先从哪些表来,怎么关联,哪些行留下,怎么分组,分组后再筛选什么。按这个顺序读题,会比死记关键字更稳。

相关题目解析

下面这些题目和本专题的判断方法关联较强,适合读完概念后回到具体题干里校验理解。