Bird
Raised Fist0
PostgreSQLquery~20 mins

Subqueries in WHERE with IN in PostgreSQL - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Subquery Mastery Badge
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ query_result
intermediate
2:00remaining
Find employees working in departments located in 'New York'
Given the tables employees(emp_id, emp_name, dept_id) and departments(dept_id, dept_name, location), what is the output of the following query?

SELECT emp_name FROM employees WHERE dept_id IN (SELECT dept_id FROM departments WHERE location = 'New York');
PostgreSQL
SELECT emp_name FROM employees WHERE dept_id IN (SELECT dept_id FROM departments WHERE location = 'New York');
AList of employee names who work in departments located in New York
BList of all employee names regardless of location
CEmpty result set
DSyntax error due to subquery
Attempts:
2 left
💡 Hint
Think about how the subquery filters departments by location and how IN matches dept_id.
📝 Syntax
intermediate
2:00remaining
Identify the syntax error in subquery with IN
Which option contains a syntax error in the use of a subquery with IN in PostgreSQL?

Consider the query:
SELECT product_name FROM products WHERE category_id IN (SELECT category_id FROM categories WHERE category_name = 'Electronics');
PostgreSQL
SELECT product_name FROM products WHERE category_id IN (SELECT category_id FROM categories WHERE category_name = 'Electronics');
ASELECT product_name FROM products WHERE category_id IN (SELECT category_id FROM categories WHERE category_name = 'Electronics');
BSELECT product_name FROM products WHERE category_id IN (SELECT category_id FROM categories WHERE category_name = Electronics);
CSELECT product_name FROM products WHERE category_id = IN (SELECT category_id FROM categories WHERE category_name = 'Electronics');
DSELECT product_name FROM products WHERE category_id IN SELECT category_id FROM categories WHERE category_name = 'Electronics';
Attempts:
2 left
💡 Hint
Check the placement of parentheses around the subquery.
❓ optimization
advanced
2:00remaining
Optimize query using IN with subquery for better performance
You have a query:
SELECT order_id FROM orders WHERE customer_id IN (SELECT customer_id FROM customers WHERE region = 'West');

Which option is the best optimization to improve performance in PostgreSQL?
PostgreSQL
SELECT order_id FROM orders WHERE customer_id IN (SELECT customer_id FROM customers WHERE region = 'West');
AAdd an index on orders.order_id
BRewrite using EXISTS:<br>SELECT order_id FROM orders WHERE EXISTS (SELECT 1 FROM customers WHERE customers.customer_id = orders.customer_id AND region = 'West');
CRewrite using JOIN:<br>SELECT orders.order_id FROM orders JOIN customers ON orders.customer_id = customers.customer_id WHERE customers.region = 'West';
DRewrite using NOT IN instead of IN
Attempts:
2 left
💡 Hint
Consider how JOINs can be more efficient than IN subqueries in some cases.
🔧 Debug
advanced
2:00remaining
Debug why query returns empty result with IN subquery
Given the query:
SELECT student_name FROM students WHERE class_id IN (SELECT class_id FROM classes WHERE teacher = 'Mr. Smith');

The query returns no rows, but you know students exist in classes taught by Mr. Smith. What is the most likely cause?
PostgreSQL
SELECT student_name FROM students WHERE class_id IN (SELECT class_id FROM classes WHERE teacher = 'Mr. Smith');
AThe teacher name in classes table is stored with trailing spaces
BThe subquery returns NULL values causing IN to fail
CThe students table has no class_id column
DThe query syntax is invalid
Attempts:
2 left
💡 Hint
Think about string matching and how trailing spaces affect equality.
🧠 Conceptual
expert
2:00remaining
Understanding NULL behavior in IN subqueries
Consider the query:
SELECT product_name FROM products WHERE category_id IN (SELECT category_id FROM categories WHERE discontinued IS NULL);

What will be the result if the subquery returns some NULL values along with valid category_ids?
PostgreSQL
SELECT product_name FROM products WHERE category_id IN (SELECT category_id FROM categories WHERE discontinued IS NULL);
AThe query raises an error due to NULL values in subquery
BThe query returns no rows because NULL in subquery causes IN to fail
CThe query returns all products regardless of category_id
DThe query returns all products with category_id matching non-NULL category_ids only
Attempts:
2 left
💡 Hint
Remember how NULLs are treated in IN conditions in SQL.

Practice

(1/5)
1. What does the IN keyword do in a SQL query when used with a subquery in the WHERE clause?
easy
A. It filters rows where a column's value matches any value returned by the subquery.
B. It joins two tables together based on matching columns.
C. It updates rows in the table with values from the subquery.
D. It deletes rows that do not exist in the subquery.

Solution

  1. Step 1: Understand the role of IN with subqueries

    The IN keyword checks if a value exists in a list of values returned by the subquery.
  2. Step 2: Identify the filtering effect

    Rows are kept only if their column value matches any value from the subquery's result.
  3. Final Answer:

    It filters rows where a column's value matches any value returned by the subquery. -> Option A
  4. Quick Check:

    IN filters rows by subquery values [OK]
Hint: Think of IN as 'is in this list' from the subquery [OK]
Common Mistakes:
  • Confusing IN with JOIN
  • Thinking IN updates or deletes rows
  • Assuming IN returns a single value only
2. Which of the following is the correct syntax to use a subquery with IN in PostgreSQL?
easy
A. SELECT * FROM employees WHERE department_id IN (SELECT * FROM departments);
B. SELECT * FROM employees WHERE department_id IN (SELECT id FROM departments);
C. SELECT * FROM employees WHERE department_id IN SELECT id FROM departments;
D. SELECT * FROM employees WHERE department_id = IN (SELECT id FROM departments);

Solution

  1. Step 1: Check the correct use of parentheses

    The subquery must be enclosed in parentheses after IN.
  2. Step 2: Verify the subquery returns a single column

    The subquery should return one column of values to compare against.
  3. Final Answer:

    SELECT * FROM employees WHERE department_id IN (SELECT id FROM departments); -> Option B
  4. Quick Check:

    Subquery in parentheses with single column [OK]
Hint: Always put subquery inside parentheses after IN [OK]
Common Mistakes:
  • Using = IN instead of just IN
  • Omitting parentheses around subquery
  • Selecting multiple columns in subquery
3. Given the tables:
employees(id, name, department_id)
departments(id, name)
What will this query return?
SELECT name FROM employees WHERE department_id IN (SELECT id FROM departments WHERE name = 'Sales');
medium
A. An error because subquery returns multiple rows.
B. Names of all employees regardless of department.
C. Names of employees who do not work in Sales.
D. Names of employees who work in the Sales department.

Solution

  1. Step 1: Understand the subquery filtering departments

    The subquery selects department IDs where the department name is 'Sales'.
  2. Step 2: Filter employees by matching department IDs

    The main query returns employee names whose department_id matches those IDs.
  3. Final Answer:

    Names of employees who work in the Sales department. -> Option D
  4. Quick Check:

    IN filters employees by Sales department IDs [OK]
Hint: Subquery filters departments, main query filters employees [OK]
Common Mistakes:
  • Thinking it returns all employees
  • Confusing NOT IN with IN
  • Assuming subquery causes error with multiple rows
4. Identify the error in this query:
SELECT * FROM employees WHERE department_id IN SELECT id FROM departments WHERE name = 'HR';
medium
A. Missing parentheses around the subquery after IN.
B. Using IN instead of EXISTS.
C. Subquery returns multiple columns.
D. department_id cannot be compared with id.

Solution

  1. Step 1: Check syntax for subquery with IN

    The subquery must be enclosed in parentheses after the IN keyword.
  2. Step 2: Identify missing parentheses causing syntax error

    The query lacks parentheses around the subquery, causing invalid syntax.
  3. Final Answer:

    Missing parentheses around the subquery after IN. -> Option A
  4. Quick Check:

    Subquery must be in parentheses after IN [OK]
Hint: Always wrap subqueries in parentheses after IN [OK]
Common Mistakes:
  • Omitting parentheses around subquery
  • Confusing IN with EXISTS syntax
  • Assuming subquery returns multiple columns
5. You want to find all customers who have placed orders for products in the 'Electronics' category. Given tables:
customers(id, name)
orders(id, customer_id, product_id)
products(id, name, category)
Which query correctly uses a subquery with IN to get these customers?
hard
A. SELECT name FROM customers WHERE id IN (SELECT id FROM products WHERE category = 'Electronics');
B. SELECT name FROM customers WHERE id = IN (SELECT customer_id FROM orders WHERE product_id IN (SELECT id FROM products WHERE category = 'Electronics'));
C. SELECT name FROM customers WHERE id IN (SELECT customer_id FROM orders WHERE product_id IN (SELECT id FROM products WHERE category = 'Electronics'));
D. SELECT name FROM customers WHERE id IN (SELECT product_id FROM orders WHERE customer_id IN (SELECT id FROM products WHERE category = 'Electronics'));

Solution

  1. Step 1: Identify the correct subquery for products in 'Electronics'

    The innermost subquery selects product IDs where category is 'Electronics'.
  2. Step 2: Use these product IDs to find matching orders

    The middle subquery selects customer IDs from orders with those product IDs.
  3. Step 3: Select customer names whose IDs match those customer IDs

    The main query selects customer names where their ID is in the list from the orders subquery.
  4. Final Answer:

    SELECT name FROM customers WHERE id IN (SELECT customer_id FROM orders WHERE product_id IN (SELECT id FROM products WHERE category = 'Electronics')); -> Option C
  5. Quick Check:

    Nested IN subqueries filter customers by product category [OK]
Hint: Use nested IN subqueries to filter step-by-step [OK]
Common Mistakes:
  • Using = IN instead of IN
  • Mixing up customer_id and product_id columns
  • Selecting wrong columns in subqueries
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