WHERE 和 HAVING 子句的区别在于作用范围:WHERE 过滤基础行,HAVING 过滤分组结果集。WHERE 用于单个行条件,HAVING 用于组结果条件。WHERE 在 FROM 后 SELECT 前,HAVING 在 GROUP BY 后。WHERE 可单独使用,HAVING 必须与分组操作一起使用。

Oracle 中 WHERE 和 HAVING 子句的区别
WHERE 和 HAVING 是两个 SQL 子句,用于筛选数据集。它们之间的主要区别在于它们的作用范围:
1. 作用范围
- WHERE 子句用于过滤基础表或视图行。它在分组操作之前执行,因此它适用于单个行的条件。
- HAVING 子句用于过滤分组后的结果集。它在分组操作之后执行,因此它适用于组结果的条件。
2. 使用场景
MALL的中文含义是购物中心,是区别于专卖店和百货公司的一个流行的商业模式,MALL里面是各个独立商家,自由自主的定价,各自管理自己的供销渠道和客户关系。电子商务的MALL模式其实就是对B2C业务模式做了多主体的扩展和延伸。目前具有代表性的电子商务MALL模式就是淘宝商城。比如淘宝电器城,他们的模式更像是做房地产的,阿里巴巴有着繁华的互联网商业物业,只是开了一个名字叫淘宝电器城的大市场而已,没有任
- WHERE 子句用于过滤不合特定条件的行。例如,查找所有价格超过 100 美元的商品:
SELECT * FROM products WHERE price > 100;
- HAVING 子句用于过滤满足特定条件的组。例如,查找平均价格超过 100 美元的商品组:
SELECT category, AVG(price) AS avg_price FROM products GROUP BY category HAVING avg_price > 100;
3. 位置
- WHERE 子句位于 FROM 子句之后,SELECT 子句之前。
- HAVING 子句位于 GROUP BY 子句之后。
4. 示例
-- 使用 WHERE 子句过滤行 SELECT * FROM orders WHERE customer_id = 1; -- 使用 HAVING 子句过滤组 SELECT product_category, SUM(quantity) AS total_quantity FROM order_details GROUP BY product_category HAVING total_quantity > 100;
注意:
- HAVING 子句只能与分组操作一起使用,而 WHERE 子句可以在任何 SQL 语句中使用。
- HAVING 子句中使用的条件必须引用聚合函数或分组列。









