Filtering Rows with WHERE and HAVING

The WHERE and HAVING clauses in a SELECT statement control the rows from the source tables that are used to build the result set. WHERE and HAVING are filters. They specify a series of search conditions, and only those rows that meet the terms of the search conditions are used to build the result set. Those rows meeting the search conditions are said to be qualified to participate in the result set. For example, the WHERE clause in this SELECT statement qualifies the rows only where the region is Washington State:

SELECT CustomerID, CompanyName

FROM Northwind.dbo.Customers

WHERE Region = 'WA'

  

The HAVING clause is typically used in conjunction with the GROUP BY clause, although it can be specified without GROUP BY. The HAVING clause specifies further filters that are applied after the WHERE clause filters. For example, this WHERE clause only qualifies orders selling a product with a unit price exceeding $100, and the HAVING clause further restricts the result to only the orders that includes 100 or more units:

SELECT OrdD1.OrderID AS OrderID,

       SUM(OrdD1.Quantity) AS "Units Sold",

       SUM(OrdD1.UnitPrice * OrdD1.Quantity) AS Revenue

FROM [Order Details] AS OrdD1

WHERE OrdD1.OrderID in (SELECT DISTINCT OrdD2.OrderID

                        FROM [Order Details] AS OrdD2

                        WHERE OrdD2.UnitPrice > $100)

GROUP BY OrdD1.OrderID

HAVING SUM(OrdD1.Quantity) > 100

  

The search conditions, or qualifications, in the WHERE and HAVING clauses can include:


Note When you search for a Unicode string in a WHERE clause, place the N character before the search string, for example:

SELECT CompanyName, ContactName, Phone, Fax

FROM Northwind.dbo.Customers

WHERE CompanyName = N'Berglunds snabbköp'

  


See Also
IS [NOT] NULL Operators
ISNULL WHERE

 

  


(c) 1988-98 Microsoft Corporation. All Rights Reserved.