当我使用GROUP BY
而不是WHERE
子句时,我已经学会了使用HAVING
,并且从未遇到过任何问题。今天我在w3schools.com的SQL学习页面上看到了这一点:
SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders
FROM Orders
INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID
WHERE LastName = 'Davolio' OR LastName = 'Fuller'
GROUP BY LastName
HAVING COUNT(Orders.OrderID) > 25;
- 为什么要这样做
- 我什么时候该用这个
WHERE
和HAVING
之间的差异对于何时应该使用其中一个与另一个,甚至两者结合使用至关重要。
HAVING
使您能够根据聚合值对结果集进行文件管理。在您的示例中,您将查询返回的数据限制为聚合(COUNT
(大于25的行。由于语法限制,无法在WHERE
中定义此类谓词。
WHERE
关键字用于为基于离散(非聚合(值的查询定义谓词。在您的示例中,WHERE
基于LastName和FirstName值限制结果。
它们能够作为有效语法相互结合使用,因为它们执行不同的(尽管非常相似(操作,而其他操作无法单独完成。至于为什么要使用它,这只是一个需要基于聚合和离散条件来限制结果集的问题。