前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >HAVNG 子句 和 WHERE 的异同点?

HAVNG 子句 和 WHERE 的异同点?

原创
作者头像
代码小李
发布2025-02-03 15:41:07
发布2025-02-03 15:41:07
570
举报

HAVING 子句和 WHERE 子句在 SQL 查询中都用于过滤数据,但它们的作用范围和使用场景有所不同。以下是它们的主要异同点:

相同点

  1. 过滤功能:两者都可以用于过滤查询结果。
  2. 条件表达式:都可以使用条件表达式来指定过滤条件。

不同点

  1. 作用对象
    • WHERE 子句:用于在聚合操作之前过滤行。它在选择哪些行进入聚合函数之前进行过滤。
    • HAVING 子句:用于在聚合操作之后过滤行。它在聚合函数计算出结果后进行过滤。
  2. 使用场景
    • WHERE 子句:通常用于过滤单个行的数据,不涉及聚合函数。
    • HAVING 子句:通常用于过滤聚合后的结果,可以包含聚合函数(如 COUNT, SUM, AVG 等)。
  3. 执行顺序
    • WHERE 子句:在 GROUP BY 之前执行。
    • HAVING 子句:在 GROUP BY 之后执行。
  4. 语法位置
    • WHERE 子句:在 FROM 子句之后,GROUP BY 子句之前。
    • HAVING 子句:在 GROUP BY 子句之后,ORDER BY 子句之前。

示例

假设有一个表 orders,包含以下字段:order_id, customer_id, amount

使用 WHERE 子句
代码语言:sql
复制
SELECT customer_id, SUM(amount) AS total_amount
FROM orders
WHERE amount > 100
GROUP BY customer_id;

在这个查询中,WHERE 子句在聚合之前过滤掉 amount 小于 100 的行。

使用 HAVING 子句
代码语言:sql
复制
SELECT customer_id, SUM(amount) AS total_amount
FROM orders
GROUP BY customer_id
HAVING SUM(amount) > 500;

在这个查询中,HAVING 子句在聚合之后过滤掉 total_amount 小于 500 的客户。

总结

  • WHERE 子句:用于在聚合之前过滤行。
  • HAVING 子句:用于在聚合之后过滤行,可以包含聚合函数。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 相同点
  • 不同点
  • 示例
    • 使用 WHERE 子句
    • 使用 HAVING 子句
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档