温馨提示×

HAVING语句与WHERE语句的区别是什么

小樊
83
2024-09-10 00:00:18
栏目: 编程语言

HAVING 和 WHERE 都是 SQL 中用于过滤数据的子句,但它们之间有一些关键区别:

  1. 应用场景:

    • WHERE 子句主要用于在 FROM 子句中的表上应用过滤条件。它在分组和聚合操作之前执行,用于过滤源数据。
    • HAVING 子句用于在 GROUP BY 子句之后对数据进行过滤。它主要用于对聚合函数(如 COUNT、SUM、AVG 等)的结果进行筛选。
  2. 使用条件:

    • WHERE 子句可以包含任何基于表列的条件,而不仅仅是聚合函数。
    • HAVING 子句只能包含基于聚合函数的条件。
  3. 执行顺序:

    • WHERE 子句在 GROUP BY 子句之前执行,用于过滤原始数据。
    • HAVING 子句在 GROUP BY 子句之后执行,用于过滤聚合后的数据。

举个例子,假设我们有一个名为 “orders” 的表,其中包含 “customer_id”、“order_date” 和 “amount” 列。

  • 使用 WHERE 子句过滤出特定日期范围内的订单:

    SELECT * FROM orders WHERE order_date BETWEEN '2021-01-01' AND '2021-12-31';
    
  • 使用 HAVING 子句过滤出订单总金额大于 1000 的客户:

    SELECT customer_id, SUM(amount) as total_amount
    FROM orders
    GROUP BY customer_id
    HAVING total_amount > 1000;
    

总之,WHERE 子句用于过滤原始数据,而 HAVING 子句用于过滤聚合后的数据。这两者在 SQL 查询中的应用场景和执行顺序有所不同。

0