Bird
Raised Fist0
PostgreSQLquery~5 mins

Why subqueries are needed in PostgreSQL - Quick Recap

Choose your learning style10 modes available
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 steps, making queries easier to write and understand.
Click to reveal answer
intermediate
How do subqueries help when filtering data?
Subqueries can find a set of 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 of why subqueries are useful.
Imagine finding customers who bought the most expensive product. A subquery finds the max price, then the main query finds customers who bought that product.
Click to reveal answer
What is the main reason to use a subquery?
ATo make queries run slower
BTo avoid using SELECT statements
CTo break complex queries into smaller parts
DTo delete data faster
Where can a subquery NOT be used?
AIn the WHERE clause
BIn the ORDER BY clause as a standalone query
CIn the SELECT clause
DIn the FROM clause
Which of these is a benefit of using subqueries?
AThey help organize and clarify complex logic
BThey always improve query speed
CThey replace the need for indexes
DThey automatically backup data
What does a subquery inside a WHERE clause usually do?
AFilters rows based on another query's result
BDeletes rows
CCreates a new table
DChanges column names
If you want to find customers who bought the most expensive product, what would you use?
AA DELETE statement
BOnly a simple SELECT without subqueries
CAn UPDATE statement
DA subquery to find the max price, then filter customers
Explain in your own words why subqueries are useful in SQL.
Think about how breaking a big task into smaller steps helps you solve it.
You got /4 concepts.
    Describe a real-life scenario where using a subquery would help solve a database question.
    Imagine you want to find something special based on a condition that needs calculation first.
    You got /3 concepts.

      Practice

      (1/5)
      1. Why do we use subqueries in PostgreSQL?
      SELECT * FROM employees WHERE department_id IN (SELECT id FROM departments WHERE location = 'NY');
      easy
      A. To change data types of columns
      B. To speed up the database server automatically
      C. To ask a question inside another query and filter results based on it
      D. To create new tables from existing ones

      Solution

      1. Step 1: Understand the role of the subquery

        The subquery (SELECT id FROM departments WHERE location = 'NY') finds department IDs located in NY.
      2. Step 2: See how the main query uses the subquery

        The main query selects employees whose department_id matches any ID from the subquery result.
      3. Final Answer:

        To ask a question inside another query and filter results based on it -> Option C
      4. Quick Check:

        Subqueries filter data using inner query results [OK]
      Hint: Subqueries answer inner questions to filter outer query [OK]
      Common Mistakes:
      • Thinking subqueries speed up queries automatically
      • Confusing subqueries with table creation
      • Using subqueries to change data types
      2. Which of the following is the correct syntax for a subquery in PostgreSQL?
      easy
      A. SELECT * FROM table WHERE column == (SELECT MAX(column) FROM table);
      B. SELECT * FROM table WHERE column = (SELECT MAX(column) FROM table);
      C. SELECT * FROM table WHERE column = SELECT MAX(column) FROM table;
      D. SELECT * FROM table WHERE column IN SELECT MAX(column) FROM table;

      Solution

      1. Step 1: Identify correct subquery syntax

        Subqueries must be enclosed in parentheses and used with comparison operators like = or IN.
      2. Step 2: Check each option

        SELECT * FROM table WHERE column = (SELECT MAX(column) FROM table); correctly uses parentheses and = with a subquery. The other options have syntax errors like using == instead of =, omitting parentheses entirely, or missing them after IN.
      3. Final Answer:

        SELECT * FROM table WHERE column = (SELECT MAX(column) FROM table); -> Option B
      4. Quick Check:

        Subqueries need parentheses and proper operators [OK]
      Hint: Subqueries always go inside parentheses [OK]
      Common Mistakes:
      • Using double equals (==) instead of single equals (=)
      • Omitting parentheses around subqueries
      • Using IN without parentheses
      3. What will be the output of this query?
      SELECT name FROM employees WHERE salary > (SELECT AVG(salary) FROM employees);
      medium
      A. Syntax error due to subquery
      B. Names of employees earning less than the average salary
      C. All employee names
      D. Names of employees earning more than the average salary

      Solution

      1. Step 1: Understand the subquery

        The subquery (SELECT AVG(salary) FROM employees) calculates the average salary of all employees.
      2. Step 2: Apply the condition in the main query

        The main query selects employee names where their salary is greater than this average.
      3. Final Answer:

        Names of employees earning more than the average salary -> Option D
      4. Quick Check:

        Subquery returns average; main query filters salaries above it [OK]
      Hint: Subqueries can return single values to compare in main query [OK]
      Common Mistakes:
      • Thinking it returns employees below average
      • Assuming syntax error due to subquery
      • Confusing AVG with SUM
      4. Identify the error in this query:
      SELECT name FROM employees WHERE department_id = SELECT id FROM departments WHERE name = 'Sales';
      medium
      A. Missing parentheses around the subquery
      B. Wrong comparison operator used
      C. Subquery returns multiple rows causing error
      D. Incorrect table name used

      Solution

      1. Step 1: Check subquery syntax

        The subquery must be enclosed in parentheses to be valid in the WHERE clause.
      2. Step 2: Identify the missing parentheses

        The query misses parentheses around SELECT id FROM departments WHERE name = 'Sales', causing syntax error.
      3. Final Answer:

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

        Subqueries need parentheses to be valid [OK]
      Hint: Always put subqueries inside parentheses [OK]
      Common Mistakes:
      • Forgetting parentheses around subqueries
      • Assuming wrong operator causes error
      • Thinking table name is incorrect
      5. You want to find employees who earn more than the average salary in their own department. Which query correctly uses a subquery to achieve this?
      hard
      A. SELECT name, salary, department_id FROM employees WHERE salary > (SELECT AVG(salary) FROM employees WHERE department_id = employees.department_id);
      B. SELECT name, salary FROM employees WHERE salary > (SELECT AVG(salary) FROM employees);
      C. SELECT name FROM employees WHERE salary > ALL (SELECT salary FROM employees);
      D. SELECT name FROM employees WHERE salary > ANY (SELECT AVG(salary) FROM employees GROUP BY department_id);

      Solution

      1. Step 1: Understand the requirement

        We need to compare each employee's salary to the average salary of their own department.
      2. Step 2: Analyze each option

        SELECT name, salary, department_id FROM employees WHERE salary > (SELECT AVG(salary) FROM employees WHERE department_id = employees.department_id); uses a correlated subquery that calculates average salary per employee's department. SELECT name, salary FROM employees WHERE salary > (SELECT AVG(salary) FROM employees); compares to overall average, ignoring departments. SELECT name FROM employees WHERE salary > ALL (SELECT salary FROM employees); compares salary to all salaries, not averages. SELECT name FROM employees WHERE salary > ANY (SELECT AVG(salary) FROM employees GROUP BY department_id); compares to a list of averages but uses ANY incorrectly.
      3. Final Answer:

        SELECT name, salary, department_id FROM employees WHERE salary > (SELECT AVG(salary) FROM employees WHERE department_id = employees.department_id); -> Option A
      4. Quick Check:

        Correlated subquery compares salary to department average [OK]
      Hint: Use correlated subqueries to compare within groups [OK]
      Common Mistakes:
      • Comparing to overall average instead of department average
      • Using ALL or ANY incorrectly with averages
      • Not correlating subquery with outer query
      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