Bird
Raised Fist0
SQLquery~5 mins

Why subqueries are needed in SQL - Quick Recap

Choose your learning style10 modes available

Start learning this pattern below

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 SQL?
A subquery is a query nested inside another query. It helps to get intermediate results that the main query can use.
Click to reveal answer
beginner
Why do we use subqueries instead of writing one big query?
Subqueries break complex problems into smaller parts, making queries easier to write and understand.
Click to reveal answer
intermediate
How do subqueries help in filtering data?
Subqueries can find specific values first, then the main query uses those values to filter results precisely.
Click to reveal answer
intermediate
Can subqueries be used in SELECT, WHERE, and FROM clauses?
Yes, subqueries can appear in SELECT to calculate values, in WHERE to filter rows, and in FROM to act like temporary tables.
Click to reveal answer
beginner
Give a real-life example where subqueries are useful.
Imagine finding employees who earn more than the average salary. A subquery calculates the average salary, then the main query finds employees above it.
Click to reveal answer
What is the main reason to use a subquery in SQL?
ATo break complex queries into smaller parts
BTo speed up the database server hardware
CTo avoid using any conditions in queries
DTo store data permanently
Where can a subquery NOT be used?
AIn the database schema definition
BIn the FROM clause
CIn the WHERE clause
DIn the SELECT clause
Which of these is a benefit of using subqueries?
AThey make queries harder to read
BThey replace indexes
CThey delete data automatically
DThey allow filtering based on calculated values
A subquery that returns multiple rows can be used with which operator?
ALIKE
BIN
CBETWEEN
DIS NULL
What does a subquery inside the FROM clause act like?
AA database user
BA permanent index
CA temporary table
DA stored procedure
Explain why subqueries are useful when writing SQL queries.
Think about how subqueries help manage complexity and filtering.
You got /4 concepts.
    Describe a scenario where using a subquery is better than a single flat query.
    Consider filtering based on a calculated value like average salary.
    You got /4 concepts.

      Practice

      (1/5)
      1. Why do we use subqueries in SQL?
      SELECT * FROM employees WHERE department_id IN (SELECT id FROM departments WHERE location = 'NY');
      easy
      A. To use the result of one query inside another for filtering or comparison
      B. To speed up the database server automatically
      C. To create new tables from existing ones
      D. To change the database schema

      Solution

      1. Step 1: Understand the role of subqueries

        The subquery inside the IN clause fetches department IDs located in 'NY'.
      2. Step 2: See how the main query uses subquery results

        The main query selects employees whose department_id matches those IDs from the subquery.
      3. Final Answer:

        To use the result of one query inside another for filtering or comparison -> Option A
      4. Quick Check:

        Subqueries help filter data using other query results [OK]
      Hint: Subqueries let queries talk to each other inside SQL [OK]
      Common Mistakes:
      • Thinking subqueries speed up queries automatically
      • Confusing subqueries with table creation
      • Believing subqueries change database structure
      2. Which of the following is the correct syntax for a subquery in SQL?
      easy
      A. SELECT name FROM employees WHERE id IN SELECT manager_id FROM departments WHERE id = 5;
      B. SELECT name FROM employees WHERE id == (SELECT manager_id FROM departments WHERE id = 5);
      C. SELECT name FROM employees WHERE id = SELECT manager_id FROM departments WHERE id = 5;
      D. SELECT name FROM employees WHERE id = (SELECT manager_id FROM departments WHERE id = 5);

      Solution

      1. Step 1: Check correct subquery syntax

        Subqueries must be enclosed in parentheses and use a single equals sign for comparison.
      2. Step 2: Identify syntax errors in other options

        SELECT name FROM employees WHERE id == (SELECT manager_id FROM departments WHERE id = 5); uses '==' which is invalid in SQL; C misses parentheses; D misses parentheses around subquery.
      3. Final Answer:

        SELECT name FROM employees WHERE id = (SELECT manager_id FROM departments WHERE id = 5); -> Option D
      4. Quick Check:

        Subqueries need parentheses and single '=' [OK]
      Hint: Subqueries always go inside parentheses with '=' or IN [OK]
      Common Mistakes:
      • Using '==' instead of '=' for comparison
      • Forgetting parentheses around subqueries
      • Using subqueries without proper syntax
      3. What will be the output of this query?
      SELECT name FROM employees WHERE department_id = (SELECT id FROM departments WHERE name = 'Sales');

      Assuming the departments table has one row with name 'Sales' and id 3, and employees table has:
      id | name | department_id
      1 | Alice | 3
      2 | Bob | 2
      3 | Carol | 3
      medium
      A. No rows returned
      B. Bob only
      C. Alice and Carol
      D. Alice, Bob, and Carol

      Solution

      1. Step 1: Find department id for 'Sales'

        The subquery returns id = 3 for 'Sales' department.
      2. Step 2: Select employees with department_id = 3

        Employees Alice and Carol have department_id 3, so they are selected.
      3. Final Answer:

        Alice and Carol -> Option C
      4. Quick Check:

        Subquery returns 3, employees with department_id 3 selected [OK]
      Hint: Match subquery result with main query filter [OK]
      Common Mistakes:
      • Assuming subquery returns multiple rows causing error
      • Selecting employees from wrong department
      • Ignoring subquery result in main query
      4. Identify the error in this SQL query:
      SELECT name FROM employees WHERE department_id = SELECT id FROM departments WHERE location = 'LA';
      medium
      A. Missing parentheses around the subquery
      B. Using '=' instead of 'IN' for multiple results
      C. Wrong table name 'employees'
      D. No error, query is correct

      Solution

      1. Step 1: Check subquery syntax

        The subquery must be enclosed in parentheses to be valid.
      2. Step 2: Confirm other parts

        Using '=' is okay if subquery returns one value; table names are correct.
      3. Final Answer:

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

        Subqueries need parentheses [OK]
      Hint: Always put subqueries inside parentheses [OK]
      Common Mistakes:
      • Forgetting parentheses around subqueries
      • Assuming '=' works for multiple rows
      • Misreading table names as errors
      5. You want to find all customers who placed orders with a total amount greater than the average order amount. Which query correctly uses a subquery to achieve this?
      hard
      A. SELECT customer_id FROM orders WHERE total_amount > AVG(total_amount);
      B. SELECT customer_id FROM orders WHERE total_amount > (SELECT AVG(total_amount) FROM orders);
      C. SELECT customer_id FROM orders WHERE total_amount IN (SELECT AVG(total_amount) FROM orders);
      D. SELECT customer_id FROM orders WHERE total_amount = (SELECT total_amount FROM orders WHERE total_amount > AVG(total_amount));

      Solution

      1. Step 1: Understand the goal

        We want customers with orders greater than the average order amount.
      2. Step 2: Check subquery usage

        SELECT customer_id FROM orders WHERE total_amount > (SELECT AVG(total_amount) FROM orders); correctly uses a subquery to calculate average and compares each order's total_amount to it.
      3. Step 3: Identify errors in other options

        SELECT customer_id FROM orders WHERE total_amount > AVG(total_amount); misuses AVG without subquery; C uses IN incorrectly; D has wrong comparison logic.
      4. Final Answer:

        SELECT customer_id FROM orders WHERE total_amount > (SELECT AVG(total_amount) FROM orders); -> Option B
      5. Quick Check:

        Subquery calculates average, main query compares amounts [OK]
      Hint: Use subquery to get average, compare in main query [OK]
      Common Mistakes:
      • Using aggregate functions without subqueries
      • Misusing IN for single value comparisons
      • Comparing with wrong operators or missing parentheses