đ A Subquery (also called a nested query or inner query) is a query written inside another SQL query. The inner query executes first, and its result is used by the outer query. Subqueries make SQL more powerful by allowing one query to depend on the results of another query.
đ What is a Subquery?
A subquery is a SELECT statement enclosed within parentheses. It can appear in different parts of an SQL statement, such as WHERE, HAVING, FROM, or SELECT.
Information
đ¯ Why Use Subqueries?
Subqueries help solve complex problems by breaking them into smaller, manageable queries.
- đ Retrieve data based on another query's result.
- đ Simplify complex SQL statements.
- đ Perform comparisons using calculated values.
- đ Filter records dynamically.
- đ Build advanced reports and analytics.
đ Sample Table
Consider the following Employees table:
| EmployeeID | EmployeeName | Department | Salary |
|---|---|---|---|
| 101 | Alice | IT | 75000 |
| 102 | Bob | HR | 55000 |
| 103 | Charlie | Finance | 68000 |
| 104 | David | IT | 82000 |
| 105 | Emma | HR | 60000 |
đ Basic Syntax
Subquery Syntax
SELECT column_name
FROM table_name
WHERE column_name operator (
SELECT column_name
FROM table_name
WHERE condition
);đĄ Simple Subquery Example
Retrieve employees whose salary is greater than the average salary.
Employees Above Average Salary
SELECT EmployeeName,
Salary
FROM Employees
WHERE Salary >
(
SELECT AVG(Salary)
FROM Employees
);SQL first calculates the average salary, then returns employees earning more than that value.
đ Subquery in WHERE Clause
The WHERE clause is the most common place to use a subquery.
Employees in the IT Department
SELECT EmployeeName
FROM Employees
WHERE Department =
(
SELECT Department
FROM Employees
WHERE EmployeeName = 'Alice'
);đ Subquery with IN
Use a subquery with IN when the inner query returns multiple values.
Employees in Selected Departments
SELECT EmployeeName,
Department
FROM Employees
WHERE Department IN
(
SELECT Department
FROM Employees
WHERE Salary > 70000
);đ Subquery with EXISTS
EXISTS checks whether the subquery returns at least one row.
EXISTS with Subquery
SELECT EmployeeName
FROM Employees e
WHERE EXISTS
(
SELECT 1
FROM Employees
WHERE Department = e.Department
AND Salary > 80000
);đ Subquery in SELECT Clause
A subquery can calculate values for each row in the result.
Display Company Average Salary
SELECT EmployeeName,
Salary,
(
SELECT AVG(Salary)
FROM Employees
) AS AverageSalary
FROM Employees;đī¸ Subquery in FROM Clause
A subquery inside the FROM clause acts like a temporary table.
Subquery in FROM
SELECT Department,
AverageSalary
FROM
(
SELECT Department,
AVG(Salary) AS AverageSalary
FROM Employees
GROUP BY Department
) AS DepartmentSummary;đ Correlated Subquery
A correlated subquery depends on values from the outer query. It executes once for each row processed by the outer query.
Employees Above Department Average
SELECT EmployeeName,
Department,
Salary
FROM Employees e
WHERE Salary >
(
SELECT AVG(Salary)
FROM Employees
WHERE Department = e.Department
);Important
âī¸ Types of Subqueries
| Type | Description |
|---|---|
| Single-Row Subquery | Returns exactly one value. |
| Multiple-Row Subquery | Returns multiple rows. |
| Multiple-Column Subquery | Returns more than one column. |
| Correlated Subquery | References columns from the outer query. |
đŧ Real-World Example
A company wants to identify employees whose salary is greater than the average salary of their own department.
Department Salary Analysis
SELECT EmployeeName,
Department,
Salary
FROM Employees e
WHERE Salary >
(
SELECT AVG(Salary)
FROM Employees
WHERE Department = e.Department
)
ORDER BY Department,
Salary DESC;This query compares each employee's salary with the average salary of their respective department.
â ī¸ Common Mistakes
- â Forgetting parentheses around the subquery.
- â Using = when the subquery returns multiple rows instead of IN or ANY.
- â Returning multiple columns where only one is expected.
- â Writing inefficient correlated subqueries for large datasets.
Warning
â ī¸ Best Practices
Best Practice
đ Key Points to Remember
- đ A subquery is a query inside another SQL query.
- đ The inner query executes before the outer query.
- đ Subqueries can be used in SELECT, FROM, WHERE, and HAVING.
- đ Use IN, EXISTS, ANY, and ALL with multi-row subqueries.
- đ Correlated subqueries execute once for each outer row.
- đ Joins or CTEs may offer better performance for complex queries.