Home Python C Language C ++ HTML 5 CSS Javascript Java Kotlin SQL DJango Bootstrap React.js R C# PHP ASP.Net Numpy Dart Pandas Digital Marketing

Correlated Subqueries in SQL


A correlated subquery is a subquery that refers to a column from the outer query. Unlike a regular (non-correlated) subquery that runs independently and returns a result set, a correlated subquery is evaluated once for each row processed by the outer query. This makes correlated subqueries more powerful, but also more computationally expensive, as they must be executed multiple times.

1. What is a Correlated Subquery?

A correlated subquery is a type of subquery where the inner query (subquery) references columns from the outer query. In other words, the subquery depends on the outer query for its values, meaning the inner query is evaluated repeatedly for each row in the outer query.

The key difference between correlated subqueries and regular subqueries is that the outer query and the subquery are linked by one or more columns, which makes the subquery "correlated" with the outer query.

2. Syntax of a Correlated Subquery

The general syntax of a correlated subquery is:

      SELECT column1, column2, ...
      FROM table1 outer
      WHERE column1 operator (SELECT column1 FROM table2 inner WHERE condition);
    

In this syntax:

3. Example of a Correlated Subquery

Suppose you have two tables: Employees and Departments. You want to find employees who earn more than the average salary in their respective departments. A correlated subquery can be used here.

      SELECT EmployeeName, Salary, DepartmentID
      FROM Employees E
      WHERE Salary > (SELECT AVG(Salary)
                      FROM Employees
                      WHERE DepartmentID = E.DepartmentID);
    

This query works as follows:

4. Key Points About Correlated Subqueries

5. Example of Using Correlated Subquery with IN

Let's say you want to find departments that have employees earning more than the average salary in any department. In this case, you can use a correlated subquery with the IN operator.

      SELECT DepartmentName
      FROM Departments D
      WHERE DepartmentID IN
          (SELECT DepartmentID
           FROM Employees E
           WHERE Salary > (SELECT AVG(Salary)
                            FROM Employees
                            WHERE DepartmentID = E.DepartmentID));
    

In this query:

6. Example of Correlated Subquery Using EXISTS

The EXISTS operator can be used in a correlated subquery to check for the existence of records that meet the condition. For example, to find employees who are assigned to at least one project, you could use a correlated subquery:

      SELECT EmployeeName
      FROM Employees E
      WHERE EXISTS (SELECT 1
                    FROM Projects P
                    WHERE P.EmployeeID = E.EmployeeID);
    

This query works as follows:

7. Performance Considerations of Correlated Subqueries

While correlated subqueries are powerful, they can be computationally expensive because the inner query is executed once for every row in the outer query. This means that if the outer query has many rows, the subquery can be executed many times, leading to slower performance, especially for large datasets.

To improve performance, you might consider using JOINs instead of correlated subqueries, as they are typically more efficient for large queries. However, in some cases, correlated subqueries provide better clarity and may be necessary for complex filtering logic.

8. Conclusion

Correlated subqueries are a powerful tool in SQL, allowing you to perform complex operations where the inner query depends on values from the outer query. While they can be less efficient than non-correlated subqueries, they provide great flexibility and can simplify complex SQL queries. Understanding when and how to use correlated subqueries is key to mastering SQL.



Advertisement

Advertisement

Advertisement





Q3 Schools : India


Online Complier

HTML 5

Python

java

C++

C

JavaScript

Website Development

HTML

CSS

JavaScript

Python

SQL

Campus Learning

C

C#

java