WHERE with IN list in SQL - Time & Space Complexity
We want to understand how the time to run a SQL query changes when using a WHERE clause with an IN list.
Specifically, how does the number of values inside the IN list affect the work the database does?
Analyze the time complexity of the following code snippet.
SELECT *
FROM employees
WHERE department_id IN (10, 20, 30, 40, 50);
This query selects all employees who belong to any of the listed departments.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Checking each row's department_id against the IN list values.
- How many times: Once for each row in the employees table.
As the number of rows grows, the database checks more rows. Also, as the IN list grows, each check takes longer.
| Input Size (rows) | IN List Size | Approx. Operations |
|---|---|---|
| 10 | 5 | About 50 checks (10 rows x 5 values) |
| 100 | 5 | About 500 checks |
| 1000 | 5 | About 5000 checks |
Pattern observation: The total checks grow with both the number of rows and the size of the IN list.
Time Complexity: O(n * m)
This means the work grows with the number of rows (n) times the number of values in the IN list (m).
[X] Wrong: "The IN list size does not affect performance because it's just a simple check."
[OK] Correct: Each value in the IN list is checked against every row, so a bigger list means more checks and more work.
Understanding how the IN list size affects query time helps you write efficient queries and explain your reasoning clearly in interviews.
"What if the IN list is replaced by a subquery that returns many values? How would the time complexity change?"
Practice
WHERE column_name IN (value1, value2, value3) do?Solution
Step 1: Understand the IN clause purpose
TheINclause checks if a column's value matches any value inside the parentheses list.Step 2: Identify the effect on row selection
Rows with the column value equal to any listed value are selected; others are ignored.Final Answer:
It selects rows wherecolumn_namematches any value in the list. -> Option AQuick Check:
WHERE with IN filters rows by listed values [OK]
- Thinking IN updates or deletes rows
- Confusing IN with creating tables
- Assuming IN matches all values at once
status is either 'active', 'pending', or 'closed'?Solution
Step 1: Check correct use of IN syntax
The correct syntax iscolumn_name IN (value1, value2, ...)without an equals sign.Step 2: Identify correct punctuation and parentheses
Values must be inside parentheses and separated by commas.Final Answer:
SELECT * FROM orders WHERE status IN ('active', 'pending', 'closed'); -> Option BQuick Check:
IN syntax = column IN (values) [OK]
- Using '=' before IN
- Missing commas between values
- Omitting parentheses around values
employees with column department, what rows will this query return?SELECT * FROM employees WHERE department IN ('HR', 'Sales');Solution
Step 1: Understand the IN filter on department
The query filters rows wheredepartmentmatches any value in ('HR', 'Sales').Step 2: Determine which rows match
Only rows with department 'HR' or 'Sales' are returned; others are excluded.Final Answer:
Rows where department is 'HR' or 'Sales'. -> Option AQuick Check:
IN filters rows matching listed values [OK]
- Thinking it returns rows not in the list
- Assuming it returns only one value
- Confusing IN with NOT IN
SELECT * FROM products WHERE category IN 'Electronics', 'Toys', 'Books';
Solution
Step 1: Check syntax of IN clause
The list of values after IN must be enclosed in parentheses.Step 2: Identify missing parentheses
The query has values listed without parentheses, causing syntax error.Final Answer:
Missing parentheses around the list of values. -> Option CQuick Check:
IN requires parentheses around values [OK]
- Omitting parentheses around values
- Using IN with equals sign
- Forgetting commas between values
orders table whose country is either 'USA', 'Canada', or 'Mexico', but exclude those with status 'cancelled'. Which query correctly uses WHERE with IN and excludes cancelled orders?Solution
Step 1: Use IN correctly for country filter
Thecountrycolumn must be checked withIN ('USA', 'Canada', 'Mexico')without equals sign.Step 2: Exclude cancelled orders with AND condition
UseAND status != 'cancelled'to exclude those rows.Final Answer:
SELECT * FROM orders WHERE country IN ('USA', 'Canada', 'Mexico') AND status != 'cancelled'; -> Option DQuick Check:
IN filters list, AND excludes cancelled [OK]
- Using OR instead of AND causing wrong results
- Adding '=' before IN
- Omitting parentheses around IN values
Ready to prove it?
Pass the test and this pattern moves unknown
