MICROSOFT ACCESS QUERIES: DIFFERENCE BETWEEN THE WHERE CLAUSE AND THE HAVING CLAUSE

Within the framework of using microsoft access database , the HAVING clause can only be used with the GROUP BY type SQL statement which is also referred as the Groups and Totals query. The HAVING keyword when not used with the GROUP BY statement acts as a standard WHEREclause.
The HAVING clause specifies a condition that is similar to the purpose of a WHERE clause when  applying criteria but the two clauses are not interchangeable.
Ms Access
The key difference between these two keywords is down to one keyword; Aggregation!

Ms Access Queries: Difference Between The Where Clause And the Having Clause

The WHERE clause specifies the criteria which individual records must meet to be selected by the query. It can be used with or without theGROUP BY clause. However, the HAVING clause cannot be used without the GROUP BY clause.
Also, the WHERE clause selects rows before it applies any grouping where as the HAVING keyword selects rows after grouping takes place.
The WHERE clause cannot contain any aggregate functions but the HAVING keyword can contain aggregate functions like Sum, Count, Avg etc.
The following SQL statement will group all customers in the ‘UK’ using the GROUP BY keyword even which will detail individual records due to the unique ID included:
SQL Statement…
SELECT Customers.[Customer ID], Customers.[Company Name],
Customers.City, Customers.Country 
FROM Customers 
GROUP BY Customers.[Customer ID], Customers.[Company Name],
Customers.City, Customers.Country 
HAVING   ((Customers.Country)="uk"));
The same effect excluding the GROUP BY clause using the WHERE clause:
SQL Statement…
SELECT Customers.[Customer ID], Customers.[Company Name],
Customers.City, Customers.Country FROM Customers 
WHERE (((Customers.Country)="uk"));
When using one of the aggregate functions, you can pass criteria too using the HAVING clause only. See example below which only returns a count of customers that exceed 5 hits for each country:
SELECT Count(Customers.[Customer ID]) AS [CountOfCustomer ID],
Customers.Country FROM Customers  
GROUP BY Customers.Country 
HAVING (((Count(Customers.[Customer ID]))>5));
This wouldn’t work with the WHERE clause as the GROUP BY is needed to first collect and group records then apply an aggregate function (count in this example) and optionally pass a filter; ‘>5’ to it after the grouping of rows or records.   microsoft access database

34 Edgwarebury Lane,Edgware,Middlesex,HA88LW,UK

Comments

Popular posts from this blog

Microsoft Access Queries: An Action Query

How To Run Microsoft Access On A Mac PC Using CrossOver Software – Alternative Options

Microsoft Access Tutorial: Creating A Many-To-Many Relationship