HAVING 子句会对查询所返回的行加以限制。它为 GROUP BY 子句设置条件的方式与 WHERE 为 SELECT 子句设置条件的方式类似。
HAVING 子句搜索条件基本上等同于 WHERE 搜索条件,只是 WHERE 搜索条件不能包括集合。例如,允许以下用法:
HAVING AVG( UnitPrice ) > 20 |
不允许以下用法:
WHERE AVG( UnitPrice ) > 20 |
以下语句是将 HAVING 子句与集合函数一起使用的简单示例。
要列出那些有多种尺寸或颜色的产品,您需要使用查询来按名称对 Products 表中的行分组,但要将只包含一种不同产品的组排除在外:
SELECT Name FROM Products GROUP BY Name HAVING COUNT( * ) > 1; |
Name |
---|
Tee Shirt |
Baseball Cap |
Visor |
Sweatshirt |
有关哪些情况下可以在 HAVING 子句中使用集合函数的信息,请参见在哪些地方可以使用集合函数。
HAVING 子句也可以不与集合函数一起使用。
以下查询对产品进行分组,然后将结果集限制为只包含名称以 B 开头的那些组。
SELECT Name FROM Products GROUP BY Name HAVING Name LIKE 'B%'; |
Name |
---|
Baseball Cap |
可以在 HAVING 子句中包括多个条件。可以用 AND、OR 或 NOT 运算符将这些条件组合起来,如以下示例所示。
要列出那些有多种尺寸或颜色,并且一个款式的价格超过 10 美元的产品,您需要使用查询来按名称将 Products 表中的行分组,但要将只包含一种不同产品的组以及最高单价低于 10 美元的组排除在外。
SELECT Name FROM Products GROUP BY Name HAVING COUNT( * ) > 1 AND MAX( UnitPrice ) > 10; |
Name |
---|
Tee Shirt |
Sweatshirt |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |