SQL WHERE 与 HAVING

WHERE 和 HAVING 都是 SQL 中用于筛选数据的子句,但它们有重要的区别

WHERE 子句

  • 在 分组前 过滤数据

  • 作用于 原始数据行

  • 不能使用聚合函数

  • 执行效率通常比 HAVING 高

SELECT column1, column2
FROM table
WHERE condition;

HAVING 子句

  • 在 分组后 过滤数据

  • 作用于 分组结果

  • 可以使用聚合函数

  • 通常与 GROUP BY 一起使用

SELECT column1, aggregate_function(column2)
FROM table
GROUP BY column1
HAVING condition;

主要区别总结

特性 WHERE HAVING
执行时机 分组前 分组后
作用对象 原始行 分组结果
聚合函数 不能使用 可以使用
性能 通常更高效 通常较低效
使用场景 常规数据过滤 分组结果过滤

示例

-- 使用WHERE筛选单价大于10的产品,然后按类别分组计算平均价格
SELECT category, AVG(price)
FROM products
WHERE price > 10
GROUP BY category;

-- 使用HAVING筛选平均价格大于50的类别
SELECT category, AVG(price)
FROM products
GROUP BY category
HAVING AVG(price) > 50;

在实际应用中,WHERE 和 HAVING 经常一起使用,WHERE 先过滤原始数据,GROUP BY 分组后,再用 HAVING 过滤分组结果。

你可能感兴趣的:(SQL,sql,数据库)