Database.Beginner.How is a correlated subquery different from a regular subquery?

Difference Between Regular Subquery and Correlated Subquery

FeatureRegular (Non-Correlated) SubqueryCorrelated Subquery
Depends on outer query?❌ No — runs independently.✅ Yes — refers to columns from the outer query.
ExecutionExecuted once.Executed once for each row of the outer query.
PerformanceUsually faster — one execution.Can be slower — multiple executions.
UsageCommon in WHERE, HAVING, SELECT, FROM.Often in WHERE or SELECT clauses.

1. Regular (Non-Correlated) Subquery

Runs once — result is used for the entire outer query.

Example

Find all products with a price higher than the average price:

SELECT name, price
FROM Products
WHERE price > (SELECT AVG(price) FROM Products);
  • (SELECT AVG(price) FROM Products) is calculated once.
  • The outer query uses that value to compare for all rows.

Independent — no reference to the outer query.

2. Correlated Subquery

The subquery depends on the current row of the outer query — it repeats for each row.

Example

Find all employees who earn more than the average salary in their department:

SELECT e1.name, e1.department, e1.salary
FROM Employees e1
WHERE e1.salary > (
    SELECT AVG(e2.salary)
    FROM Employees e2
    WHERE e2.department = e1.department
);
  • For each employee e1, the subquery:
    • Calculates the average salary of that employee’s department.
  • e2.department = e1.departmentreferences the outer query.

Dependent — the subquery uses values from the current row of the outer query.

Key Differences Visually

Regular Subquery (Run Once)
Outer query (uses one subquery result)
└── Subquery (runs once, gives a constant)
Correlated Subquery (Run per Row)
Outer query (for each row)
└── Subquery (uses values from the outer row)

Why Correlated Subqueries Are Slower

  • If you have 10,000 rows, a regular subquery runs once.
  • A correlated subquery might run 10,000 times — once for each row!
  • More work → more time → slower on big data.

Real-Life Analogy

Regular SubqueryCorrelated Subquery
Ask: “What’s the average height of all people?”Ask: “What’s the average height of people in your city?” (for every person)

In Short

Regular SubqueryCorrelated Subquery
Runs once.Runs once for each row.
Independent of outer query.Depends on outer query’s current row.
This entry was posted in Без рубрики. Bookmark the permalink.

Leave a Reply

Your email address will not be published.