Open In App

Difference between Where and Having Clause in SQL

Last Updated : 20 Jun, 2025
Comments
Improve
Suggest changes
Like Article
Like
Report

In SQL, the WHERE and HAVING clauses are essential for filtering data and refining query results. While both serve the purpose of applying conditions, they are used at different stages of query execution and for distinct purposes.

Understanding the differences between the WHERE and HAVING clauses is important for writing optimized and effective SQL queries. In this article, we will provide an in-depth comparison, practical examples, and clear explanations to enhance our understanding.

Difference Between WHERE and HAVING Clause in SQL

Before going into examples, it’s important to understand the distinctions between the WHERE and HAVING clauses. The table below outlines their key differences for a clear comparison.

WHERE ClauseHAVING Clause
Filters rows before groups are aggregated.Filters groups after the aggregation process..
WHERE Clause can be used without GROUP BY ClauseHAVING Clause can be used with GROUP BY Clause
WHERE Clause implements in row operationsHAVING Clause implements in column operation
WHERE Clause cannot contain aggregate functionHAVING Clause can contain aggregate function
WHERE Clause can be used with SELECT, UPDATE, DELETE statement.HAVING Clause can only be used with SELECT statement.
WHERE Clause is used before GROUP BY ClauseHAVING Clause is used after GROUP BY Clause
WHERE Clause is used with single row function like UPPER, LOWER etc.HAVING Clause is used with multiple row function like SUM, COUNT etc.

Understanding the WHERE Clause in SQL

WHERE Clause is used to filter the records from the table or used while joining more than one table. Only those records will be extracted who are satisfying the specified condition in the WHERE clause. It can be used with SELECT, UPDATE, and DELETE statements. It is applied before any grouping or aggregation occurs in a query

Example: Using the WHERE Clause

Consider the following Student table. The table below contains details of students, including their roll numbers, names, and ages. We can use SQL queries to filter, sort, or retrieve specific data from this table based on various conditions.

student-table

Filtering Students Aged 18 or Above

In this example, it effectively retrieves students aged 18 or older, excluding those who do not meet the criteria. This approach ensures a refined and focused result set.

Query:

SELECT S_Name, Age 
FROM Student
WHERE Age >=18

Output

Students-Aged-18-or-Above

Explanation:

  1. The query selects the columns S_Name and Age from the Student table.
  2. The WHERE clause filters rows where the Age is greater than or equal to 18.
  3. Only rows satisfying the condition are included in the result set.

HAVING Clause

HAVING Clause is used to filter the records from the groups based on the given condition in the HAVING Clause. Those groups who will satisfy the given condition will appear in the final result. It is applied after the grouping and aggregation of data.

Query:

SELECT Age, COUNT(Roll_No) AS No_of_Students 
FROM Student GROUP BY Age
HAVING COUNT(Roll_No) > 1

Output

Age 

No_of_Students

17    

3

20  

2

21  

2

Conclusion

While both WHERE and HAVING clauses are used for filtering in SQL, they are applied at different stages of query execution and serve distinct purposes: The WHERE clause filters rows before any grouping or aggregation occurs. The HAVING clause filters grouped data after aggregation. Understanding these differences ensures efficient query design and accurate results. Use WHERE for conditions on individual rows and HAVING for conditions on grouped data.


Next Article

Similar Reads