One of the most common sources of confusion in IB Computer Science SQL questions is the difference between WHERE and HAVING. Many students know that both involve conditions, but they apply those conditions at different stages of a query and to different types of data.
IB examiners often include questions specifically designed to test whether students truly understand this distinction.
Why HAVING and WHERE Both Exist
At first glance, WHERE and HAVING seem to do the same thing — they both apply conditions. However, they work on different levels of data:
- WHERE filters individual records (rows)
- HAVING filters groups of records created by GROUP BY
Understanding this difference is the key to full marks.
What Is WHERE?
The WHERE clause is used to filter records before any grouping or aggregation takes place.
WHERE:
- Applies to individual rows
- Works with raw data values
- Is evaluated early in the query
WHERE is commonly used to:
- Select records matching a condition
- Limit data before processing
For example, WHERE can:
- Select students in a specific year group
- Filter orders above a certain value
In IB terms, WHERE controls which records enter the query.
What Is HAVING?
The HAVING clause is used to filter groups of records after GROUP BY has been applied.
HAVING:
- Applies to grouped data
- Works with aggregate functions
- Is evaluated after grouping
HAVING is used when conditions depend on:
- COUNT
- SUM
- AVG
- Other aggregate results
For example, HAVING can:
- Select groups with more than a certain number of records
- Filter categories based on totals or averages
In IB exams, HAVING is always linked to aggregation.
The Key Difference in One Sentence
A useful IB exam summary is:
- WHERE filters rows
- HAVING filters groups
This single distinction solves most SQL confusion.
Order of Logical Execution (Conceptual)
Conceptually, SQL processes queries in this order:
- FROM identifies the table
- WHERE filters individual records
- GROUP BY creates groups
- HAVING filters groups
- SELECT displays results
IB students are not required to memorise execution order, but understanding the sequence helps explain why WHERE and HAVING are both needed.
Why WHERE Cannot Replace HAVING
WHERE cannot filter:
- Aggregate results
- Group totals
- Group averages
This is because:
- WHERE runs before aggregation
- Aggregate values do not exist yet
HAVING exists specifically to solve this problem.
Why HAVING Cannot Replace WHERE
HAVING:
- Works only after grouping
- Is inefficient for filtering raw data
- Is not designed for row-level filtering
Using HAVING instead of WHERE wastes processing and is conceptually incorrect.
Common Student Mistakes
Students often:
- Use HAVING without GROUP BY
- Try to filter aggregates using WHERE
- Confuse grouping with sorting
- Give definitions without explanation
Clear cause-and-effect explanations earn higher marks.
How This Appears in IB Exams
IB questions may ask students to:
- Choose between WHERE and HAVING
- Explain why one is required
- Interpret grouped query results
- Correct an incorrect SQL query
Understanding when and why to use each clause is more important than syntax.
Final Thoughts
WHERE and HAVING both apply conditions, but at different stages of a query. WHERE filters individual records before grouping, while HAVING filters grouped results after aggregation.
Understanding this distinction allows IB Computer Science students to explain SQL queries clearly, logically, and accurately — exactly what examiners expect.
