← Back to Questions
SQL

What is a subquery in SQL?

Learn What is a subquery in SQL? with simple explanations, real-time examples, interview tips and practical use cases.

A Subquery in SQL is a query written inside another SQL query.

In simple words:

A subquery is an inner query whose result is used by the outer query.


Why Subqueries are Important

In enterprise applications:

  • Complex data filtering is required
  • Dependent queries are common
  • Dynamic conditions are needed

Subqueries help:

  • Break complex queries into smaller parts
  • Improve query readability
  • Perform nested data retrieval
  • Handle advanced filtering logic

Simple Real-Life Example

Think about:

  • Finding students whose marks are above average

Steps

  • First calculate average marks
  • Then compare all students against average

This Requires

One query inside another query.


Subquery Internal Architecture

Execute Inner Query
        |
        v
Return Intermediate Result
        |
        v
Outer Query Uses Result
        |
        v
Final Output Returned

Basic Subquery Syntax

SELECT column_name

FROM table_name

WHERE column_name operator (

    SELECT column_name
    FROM another_table

);

Simple Subquery Example

Students Table:

Student Marks
Naresh 90
Rahul 70
Arjun 80

Requirement

Find students scoring above average marks.


Subquery Solution

SELECT name, marks

FROM students

WHERE marks > (

    SELECT AVG(marks)
    FROM students

);

What Happens Internally?

Step 1

Inner query executes:

SELECT AVG(marks)
FROM students;

Result

80

Step 2

Outer query becomes:

SELECT name, marks

FROM students

WHERE marks > 80;

Final Result

Name Marks
Naresh 90

Subquery Query Flow

Run Inner Query
      |
      v
Get Intermediate Result
      |
      v
Pass Result to Outer Query
      |
      v
Return Final Output

Types of Subqueries

  • Single Row Subquery
  • Multiple Row Subquery
  • Correlated Subquery
  • Nested Subquery

1. Single Row Subquery

Returns:

  • Only one row

Example

SELECT *
FROM employees

WHERE salary > (

    SELECT AVG(salary)
    FROM employees

);

2. Multiple Row Subquery

Returns:

  • Multiple rows

Example

SELECT name

FROM students

WHERE course_id IN (

    SELECT course_id
    FROM courses
    WHERE duration > 6

);

Why IN Operator?

Because:

  • Subquery returns multiple values

3. Correlated Subquery

A correlated subquery:

  • Depends on outer query values

Example

SELECT e1.employee_name

FROM employees e1

WHERE salary > (

    SELECT AVG(salary)

    FROM employees e2

    WHERE e1.department_id = e2.department_id

);

What Happens?

Subquery executes:

  • For every row of outer query

Why Correlated Subqueries are Slower

Because:

  • Inner query runs repeatedly

4. Nested Subquery

Subquery inside another subquery.


Example

SELECT name

FROM students

WHERE course_id = (

    SELECT course_id

    FROM courses

    WHERE trainer_id = (

        SELECT trainer_id
        FROM trainers
        WHERE trainer_name = 'David'

    )

);

Subquery Locations in SQL

Subqueries can be used in:

  • SELECT clause
  • FROM clause
  • WHERE clause
  • HAVING clause

Subquery in SELECT Clause

SELECT name,

(

    SELECT AVG(marks)
    FROM students

) AS average_marks

FROM students;

Subquery in FROM Clause

SELECT *

FROM (

    SELECT *
    FROM employees
    WHERE salary > 50000

) AS high_salary_employees;

Subquery in HAVING Clause

SELECT department_id,
       AVG(salary)

FROM employees

GROUP BY department_id

HAVING AVG(salary) > (

    SELECT AVG(salary)
    FROM employees

);

Subquery Operators

  • IN
  • EXISTS
  • ANY
  • ALL

1. IN Operator

Checks:

  • Whether value exists in subquery result

Example

WHERE course_id IN (

    SELECT course_id
    FROM courses

)

2. EXISTS Operator

Checks:

  • Whether subquery returns rows

Example

SELECT name

FROM students s

WHERE EXISTS (

    SELECT 1
    FROM enrollments e
    WHERE s.student_id = e.student_id

);

3. ANY Operator

Condition true if:

  • Matches any subquery value

4. ALL Operator

Condition true if:

  • Matches all subquery values

Subquery vs JOIN

Feature Subquery JOIN
Readability Simple for nested logic Better for table relationships
Performance Sometimes slower Usually faster
Complex Logic Easy to express Can become complex

Why JOIN is Sometimes Better?

Because:

  • Database optimizers handle joins efficiently

Real-Time Banking Example

Banking systems use subqueries for:

  • High-value customer analysis
  • Fraud detection
  • Balance comparisons

Example

Find customers whose balance is above branch average.

Real-Time E-Commerce Example

E-commerce platforms use subqueries for:

  • Top-selling products
  • High-value orders
  • Inventory analysis

Example

Find products priced above average category price.

Real-Time Learning Platform Example

Learning platforms use subqueries for:

  • Top-performing students
  • Course analytics
  • Progress comparisons

Example

Find students scoring above course average.

Subqueries in Microservices

Microservices use subqueries for:

  • Reporting APIs
  • Analytics queries
  • Dashboard calculations

Advantages of Subqueries

  • Improves readability
  • Supports complex filtering
  • Breaks large queries into smaller parts
  • Useful for dynamic calculations

Disadvantages of Subqueries

  • Can reduce performance
  • Correlated subqueries are expensive
  • Difficult debugging in nested queries

Performance Consideration

Large subqueries may:

  • Increase execution time

Best Practices

  • Use JOINs when performance matters
  • Avoid deeply nested subqueries
  • Optimize correlated subqueries carefully
  • Use indexes on filtered columns

Common Interview Mistake

Many developers think:

  • Subqueries always execute after outer query

Reality

Usually:

  • Inner query executes first

except:

  • Correlated subqueries

Related Learning Topics


Professional Interview Answer

A Subquery in SQL is a query written inside another SQL query, where the result of the inner query is used by the outer query. Subqueries are commonly used for complex filtering, dynamic calculations, nested data retrieval, and conditional logic. They can return single rows, multiple rows, or correlated results depending on the use case. Subqueries can be used in SELECT, FROM, WHERE, and HAVING clauses. Although subqueries improve readability and simplify complex logic, correlated or deeply nested subqueries may affect performance, and JOIN operations are often preferred for optimization in enterprise applications.


Why Interviewers Like This Answer

  • Clearly explains inner and outer query concepts
  • Includes different subquery types
  • Shows performance understanding
  • Provides real-world enterprise examples
  • Explains JOIN vs Subquery trade-offs

Frequently Asked Questions

What is a subquery in SQL?

A subquery is a query written inside another SQL query.

Why are subqueries used?

Subqueries are used for complex filtering and nested data retrieval.

What is a correlated subquery?

A correlated subquery depends on values from the outer query.

Are subqueries slower than joins?

Sometimes yes, especially correlated subqueries.

Where can subqueries be used?

In SELECT, FROM, WHERE, and HAVING clauses.

Why this SQL question is important?

This interview question helps candidates understand real-time backend development concepts, practical problem solving, coding fundamentals, system design basics and production-ready application behavior.

Practice this question carefully for Java backend roles, Spring Boot developer interviews, microservices interviews, company interviews and full-stack developer preparation.

About the Author

Naresh Kumar is a Senior Java Backend Engineer with experience building enterprise applications using Java, Spring Boot, Microservices, Docker, Kubernetes and Cloud technologies.