Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is a subquery in the WHERE clause?
A subquery in the WHERE clause is a query inside another query that helps filter results based on values returned by the inner query.
Click to reveal answer
beginner
How does a subquery in the WHERE clause work?
The outer query uses the result of the subquery to decide which rows to include. The subquery runs first and returns values that the outer query compares against.
Click to reveal answer
beginner
Example: SELECT * FROM employees WHERE department_id IN (SELECT id FROM departments WHERE location = 'New York'); What does this query do?
It finds all employees who work in departments located in New York. The subquery finds department IDs in New York, and the outer query selects employees in those departments.
Click to reveal answer
intermediate
Can a subquery in the WHERE clause return multiple values?
Yes, subqueries can return multiple values when used with operators like IN, ANY, or ALL to compare against multiple results.
Click to reveal answer
intermediate
What is the difference between using '=' and 'IN' with a subquery in the WHERE clause?
'=' expects the subquery to return a single value, while 'IN' allows the subquery to return multiple values to match any of them.
Click to reveal answer
What does a subquery in the WHERE clause do?
ACreates a new table
BFilters rows based on values returned by the inner query
CUpdates data in the database
DDeletes rows from a table
✗ Incorrect
A subquery in the WHERE clause filters rows by using values returned from the inner query.
Which operator allows a subquery to return multiple values in the WHERE clause?
A=
BBETWEEN
CIN
DLIKE
✗ Incorrect
The IN operator allows the subquery to return multiple values to match any of them.
What happens if a subquery in the WHERE clause returns no rows?
AThe outer query returns no rows
BThe outer query returns all rows
CThe database throws an error
DThe subquery runs again
✗ Incorrect
If the subquery returns no rows, the outer query finds no matching rows and returns no results.
Which of these is a valid use of a subquery in the WHERE clause?
ASELECT * FROM products WHERE price IN 'SELECT price FROM products';
BSELECT * FROM products WHERE price = 'SELECT AVG(price) FROM products';
CSELECT * FROM products WHERE price > ALL 'SELECT price FROM products';
DSELECT * FROM products WHERE price > (SELECT AVG(price) FROM products);
✗ Incorrect
Option D correctly uses a subquery to compare price to the average price.
Can a subquery in the WHERE clause reference columns from the outer query?
A correlated subquery references columns from the outer query and runs once per outer row.
Explain how a subquery in the WHERE clause helps filter data with an example.
Think about how the inner query returns values that the outer query uses to decide which rows to keep.
You got /3 concepts.
Describe the difference between using '=' and 'IN' with subqueries in the WHERE clause.
Consider what happens if the subquery returns one value or many values.
You got /3 concepts.
Practice
(1/5)
1. What does a subquery in the WHERE clause do in SQL?
easy
A. Creates a new table from existing data
B. Filters rows based on the results of another query
C. Deletes rows from a table
D. Updates values in a table
Solution
Step 1: Understand the role of subqueries in WHERE clause
A subquery inside a WHERE clause is used to filter rows by comparing values to the results of another query.
Step 2: Compare with other SQL operations
Creating tables, deleting, or updating rows are different SQL operations and not the purpose of subqueries in WHERE.
Final Answer:
Filters rows based on the results of another query -> Option B
Quick Check:
Subquery in WHERE = filter rows [OK]
Hint: Subquery in WHERE filters rows using another query's results [OK]
Common Mistakes:
Thinking subquery creates or modifies tables
Confusing subquery with JOIN
Assuming subquery always returns one value
2. Which of the following is the correct syntax to use a subquery in the WHERE clause to find employees in departments with ID 10 or 20?
easy
A. SELECT * FROM employees WHERE department_id IN SELECT department_id FROM departments WHERE department_id IN (10, 20);
B. SELECT * FROM employees WHERE department_id = (SELECT department_id FROM departments WHERE department_id IN (10, 20));
C. SELECT * FROM employees WHERE department_id IN (SELECT department_id FROM departments WHERE department_id = 10 OR 20);
D. SELECT * FROM employees WHERE department_id IN (SELECT department_id FROM departments WHERE department_id IN (10, 20));
Solution
Step 1: Identify correct subquery syntax with IN
The subquery must be enclosed in parentheses and used with IN to match multiple values.
Step 2: Check each option's syntax
SELECT * FROM employees WHERE department_id IN (SELECT department_id FROM departments WHERE department_id IN (10, 20)); correctly uses IN with a subquery in parentheses. SELECT * FROM employees WHERE department_id = (SELECT department_id FROM departments WHERE department_id IN (10, 20)); uses = which expects one value, causing error. SELECT * FROM employees WHERE department_id IN SELECT department_id FROM departments WHERE department_id IN (10, 20); misses parentheses around subquery. SELECT * FROM employees WHERE department_id IN (SELECT department_id FROM departments WHERE department_id = 10 OR 20); has incorrect WHERE clause syntax.
Final Answer:
SELECT * FROM employees WHERE department_id IN (SELECT department_id FROM departments WHERE department_id IN (10, 20)); -> Option D
Quick Check:
Subquery with IN needs parentheses [OK]
Hint: Use IN with parentheses for subqueries returning multiple values [OK]
Common Mistakes:
Using = instead of IN for multiple values
Omitting parentheses around subquery
Incorrect WHERE clause conditions inside subquery
3. Given the tables: employees(emp_id, name, department_id) departments(department_id, name) What will this query return?
SELECT name FROM employees WHERE department_id IN (SELECT department_id FROM departments WHERE name = 'Sales');
medium
A. Names of employees who work in the Sales department
B. Names of all employees
C. Names of departments named Sales
D. An error because subquery returns multiple rows
Solution
Step 1: Understand the subquery
The subquery selects department_id from departments where name is 'Sales'. This returns IDs of Sales departments.
Step 2: Apply subquery results in main query
The main query selects employee names where their department_id matches any of those returned by the subquery.
Final Answer:
Names of employees who work in the Sales department -> Option A
Quick Check:
Subquery filters employees by Sales department [OK]
Hint: Subquery filters department IDs, main query filters employees [OK]
Common Mistakes:
Thinking subquery returns employee names
Confusing department names with employee names
Assuming subquery causes error with multiple rows
4. Identify the error in this query:
SELECT * FROM orders WHERE customer_id = (SELECT customer_id FROM customers WHERE city = 'New York');
medium
A. Incorrect table name 'orders'
B. Missing FROM clause in subquery
C. Subquery returns multiple rows causing an error with '=' operator
D. No error, query is correct
Solution
Step 1: Analyze subquery result
The subquery selects customer_id from customers where city is 'New York'. This can return multiple customer IDs.
Step 2: Check operator compatibility
The main query uses '=' which expects a single value, but subquery returns multiple rows, causing an error.
Final Answer:
Subquery returns multiple rows causing an error with '=' operator -> Option C
Quick Check:
Use IN for multiple subquery results [OK]
Hint: Use IN if subquery returns multiple values, not = [OK]
Common Mistakes:
Using = with subquery returning multiple rows
Assuming subquery always returns one value
Ignoring error messages about subquery results
5. You want to find all products that have never been ordered. Given tables: products(product_id, name) orders(order_id, product_id) Which query correctly uses a subquery in the WHERE clause to find these products?
hard
A. SELECT name FROM products WHERE product_id NOT IN (SELECT product_id FROM orders);
B. SELECT name FROM products WHERE product_id IN (SELECT product_id FROM orders);
C. SELECT name FROM products WHERE product_id = (SELECT product_id FROM orders);
D. SELECT name FROM products WHERE product_id NOT = (SELECT product_id FROM orders);
Solution
Step 1: Understand the goal
We want products that have never been ordered, so their product_id should NOT appear in orders.
Step 2: Use NOT IN with subquery
The subquery selects all product_ids from orders. Using NOT IN filters products not in that list.
Step 3: Check other options
SELECT name FROM products WHERE product_id IN (SELECT product_id FROM orders); finds products that have been ordered (opposite). SELECT name FROM products WHERE product_id = (SELECT product_id FROM orders); uses = which expects one value, causing error. SELECT name FROM products WHERE product_id NOT = (SELECT product_id FROM orders); uses NOT = which is invalid syntax for multiple values.
Final Answer:
SELECT name FROM products WHERE product_id NOT IN (SELECT product_id FROM orders); -> Option A
Quick Check:
NOT IN filters products never ordered [OK]
Hint: Use NOT IN with subquery to find missing matches [OK]