Bird
Raised Fist0
SQLquery~10 mins

CASE in WHERE clause in SQL - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - CASE in WHERE clause
Start Query Execution
↓
Evaluate WHERE Clause
↓
CASE Expression Evaluated
↓
Compare CASE Result to Condition
↓
Row Included if Condition True
↓
Next Row or End
The query checks each row by evaluating the CASE expression inside the WHERE clause, then includes the row if the condition is true.
Execution Sample
SQL
SELECT * FROM employees
WHERE CASE WHEN department = 'Sales' THEN salary > 50000
           WHEN department = 'HR' THEN salary > 40000
           ELSE salary > 30000 END = TRUE;
This query selects employees based on salary thresholds that depend on their department using CASE in the WHERE clause.
Execution Table
StepRow Data (department, salary)CASE EvaluationCondition ResultInclude Row?
1('Sales', 60000)salary > 50000 -> 60000 > 50000 = TRUETRUEYes
2('Sales', 45000)salary > 50000 -> 45000 > 50000 = FALSEFALSENo
3('HR', 42000)salary > 40000 -> 42000 > 40000 = TRUETRUEYes
4('HR', 39000)salary > 40000 -> 39000 > 40000 = FALSEFALSENo
5('IT', 35000)salary > 30000 -> 35000 > 30000 = TRUETRUEYes
6('IT', 29000)salary > 30000 -> 29000 > 30000 = FALSEFALSENo
7End of rows---
💡 All rows processed; query ends.
Variable Tracker
VariableStartAfter 1After 2After 3After 4After 5After 6Final
departmentN/ASalesSalesHRHRITITN/A
salaryN/A600004500042000390003500029000N/A
CASE resultN/ATRUEFALSETRUEFALSETRUEFALSEN/A
Include row?N/AYesNoYesNoYesNoN/A
Key Moments - 2 Insights
Why does the CASE expression return TRUE or FALSE instead of a value?
Because the CASE in the WHERE clause is used to evaluate conditions that result in TRUE or FALSE to decide if a row should be included, as shown in execution_table rows 1-6.
What happens if none of the WHEN conditions match in the CASE?
The ELSE part is evaluated, as in row 5 and 6 where department is 'IT', so the ELSE condition salary > 30000 is checked.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the CASE result for the row ('HR', 39000)?
ATRUE
BFALSE
CNULL
DError
💡 Hint
Check row 4 in the execution_table under CASE Evaluation and Condition Result.
At which step does the ELSE condition get evaluated?
AStep 1
BStep 3
CStep 5
DStep 6
💡 Hint
Look at the department value and CASE Evaluation in steps 5 and 6.
If the salary for ('Sales', 45000) changed to 55000, what would be the Include Row? value at step 2?
AYes
BNo
CDepends on ELSE
DError
💡 Hint
Refer to step 2 in execution_table and consider the condition salary > 50000.
Concept Snapshot
CASE in WHERE clause syntax:
WHERE CASE
  WHEN condition1 THEN condition_result1
  WHEN condition2 THEN condition_result2
  ELSE condition_result_default
END = TRUE;

It evaluates conditions per row and returns TRUE/FALSE to filter rows.
Use CASE to apply different filters based on row data.
Full Transcript
This visual execution shows how a SQL query uses CASE inside the WHERE clause to filter rows differently based on department and salary. Each row is checked: the CASE expression evaluates conditions for that row's department and salary, returning TRUE or FALSE. Rows with TRUE are included in the result. The ELSE clause handles departments not explicitly listed. The execution table traces each row's evaluation step by step, showing how the CASE expression guides which rows pass the filter.

Practice

(1/5)
1. What does using CASE in a WHERE clause allow you to do in SQL?
easy
A. Sort the results in multiple ways
B. Create new columns in the result set
C. Apply different filter conditions based on row values
D. Join tables conditionally

Solution

  1. Step 1: Understand the role of CASE in WHERE

    The CASE expression in WHERE lets you choose which condition to apply depending on data values in each row.
  2. Step 2: Compare with other options

    Creating new columns is done with SELECT, sorting with ORDER BY, and joining with JOIN, not CASE in WHERE.
  3. Final Answer:

    Apply different filter conditions based on row values -> Option C
  4. Quick Check:

    CASE in WHERE = conditional filtering [OK]
Hint: CASE in WHERE picks filters by row values [OK]
Common Mistakes:
  • Thinking CASE creates new columns
  • Confusing CASE with ORDER BY
  • Assuming CASE controls JOIN logic
2. Which of the following is the correct syntax to use CASE inside a WHERE clause?
easy
A. WHERE CASE age WHEN > 18 THEN 'adult' ELSE 'minor' END = 'adult'
B. WHERE CASE WHEN age > 18 THEN 'adult' ELSE 'minor' END = 'adult'
C. WHERE CASE WHEN age > 18 THEN adult ELSE minor END
D. WHERE CASE age > 18 THEN 'adult' ELSE 'minor' END = 'adult'

Solution

  1. Step 1: Review correct CASE syntax

    The correct CASE syntax uses WHEN condition THEN result ELSE result END. WHERE CASE WHEN age > 18 THEN 'adult' ELSE 'minor' END = 'adult' follows this exactly.
  2. Step 2: Identify syntax errors in other options

    Options B, C, and D misuse CASE syntax by missing WHEN or ELSE keywords or incorrect placement.
  3. Final Answer:

    WHERE CASE WHEN age > 18 THEN 'adult' ELSE 'minor' END = 'adult' -> Option B
  4. Quick Check:

    CASE WHEN ... THEN ... ELSE ... END [OK]
Hint: CASE needs WHEN and THEN keywords in WHERE [OK]
Common Mistakes:
  • Omitting WHEN keyword
  • Using CASE without END
  • Placing conditions incorrectly
3. Given the table Employees with column salary, what rows will this query return?
SELECT * FROM Employees WHERE CASE WHEN salary >= 50000 THEN 1 ELSE 0 END = 1;
medium
A. Rows where salary is less than 50000
B. Rows where salary is exactly 50000
C. All rows regardless of salary
D. Rows where salary is 50000 or more

Solution

  1. Step 1: Understand the CASE condition

    The CASE returns 1 if salary is 50000 or more, else 0.
  2. Step 2: Apply the WHERE filter

    The WHERE clause keeps rows where CASE result equals 1, so salary must be at least 50000.
  3. Final Answer:

    Rows where salary is 50000 or more -> Option D
  4. Quick Check:

    salary >= 50000 = filtered rows [OK]
Hint: CASE returns 1 for salary ≥ 50000, filter keeps those rows [OK]
Common Mistakes:
  • Thinking it returns rows below 50000
  • Confusing equality with greater than
  • Ignoring ELSE result
4. Identify the error in this query using CASE in WHERE clause:
SELECT * FROM Orders WHERE CASE order_status WHEN 'shipped' THEN TRUE ELSE FALSE;
medium
A. Missing END keyword for CASE expression
B. Incorrect use of TRUE/FALSE in CASE
C. CASE cannot be used in WHERE clause
D. Missing THEN keyword in CASE

Solution

  1. Step 1: Check CASE syntax completeness

    The CASE expression must end with END keyword, which is missing here.
  2. Step 2: Verify other parts

    TRUE/FALSE usage is valid, CASE can be used in WHERE, and THEN keyword is present.
  3. Final Answer:

    Missing END keyword for CASE expression -> Option A
  4. Quick Check:

    CASE ... END required [OK]
Hint: Always close CASE with END in WHERE [OK]
Common Mistakes:
  • Forgetting END keyword
  • Thinking CASE can't be in WHERE
  • Misplacing THEN keyword
5. You want to filter Products so that if category is 'Electronics', only products with stock > 0 are shown; otherwise, show products with price < 100. Which WHERE clause using CASE is correct?
hard
A. WHERE CASE WHEN category = 'Electronics' THEN stock > 0 ELSE price < 100 END = TRUE
B. WHERE CASE category WHEN 'Electronics' THEN stock > 0 ELSE price < 100 = TRUE
C. WHERE CASE WHEN category = 'Electronics' THEN stock > 0 ELSE price < 100
D. WHERE CASE category WHEN 'Electronics' THEN stock > 0 ELSE price < 100

Solution

  1. Step 1: Understand CASE returns boolean condition

    The CASE must return TRUE or FALSE to filter rows properly.
  2. Step 2: Check syntax and comparison

    WHERE CASE WHEN category = 'Electronics' THEN stock > 0 ELSE price < 100 END = TRUE correctly uses WHEN condition THEN boolean expression ELSE boolean expression END = TRUE to filter rows.
  3. Step 3: Identify why others are wrong

    Options A, B, and D miss the END keyword for the CASE expression, causing syntax errors.
  4. Final Answer:

    WHERE CASE WHEN category = 'Electronics' THEN stock > 0 ELSE price < 100 END = TRUE -> Option A
  5. Quick Check:

    CASE returns boolean, compare with TRUE in WHERE [OK]
Hint: Compare CASE result to TRUE in WHERE for boolean filters [OK]
Common Mistakes:
  • Missing END keyword
  • Using CASE with simple WHEN without condition
  • Returning non-boolean values in CASE
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard