🔹 What is a Subquery?
A subquery is a query inside another SQL query.
It is often used in the WHERE
, FROM
, or SELECT
clause to provide intermediate results.
🔹 Types of Subqueries
- Single-row subquery → returns only one value
- Multi-row subquery → returns multiple values
- Nested subquery in SELECT or FROM → used as derived tables or calculated fields
🔹 Examples
1. Subquery in WHERE
Find employees who earn more than the average salary:
SELECT employee_id, name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
👉 The inner query (SELECT AVG(salary) FROM employees)
returns one value (average salary).
👉 The outer query then compares each employee’s salary to it.
2. Subquery in IN
Find employees who work in departments located in New York:
SELECT name, department_id
FROM employees
WHERE department_id IN (
SELECT department_id
FROM departments
WHERE location = 'New York'
);
👉 The subquery returns multiple department IDs.
👉 The outer query checks if an employee’s department is in that list.
3. Subquery in FROM
(Derived Table)
Find the highest salary per department:
SELECT dept_id, MAX(salary) AS highest_salary
FROM (
SELECT department_id AS dept_id, salary
FROM employees
) AS dept_salaries
GROUP BY dept_id;
👉 The inner query creates a temporary table (dept_salaries
).
👉 The outer query aggregates from it.
4. Subquery in SELECT
Show employees and how much above the average salary they earn:
SELECT name, salary,
salary - (SELECT AVG(salary) FROM employees) AS diff_from_avg
FROM employees;
👉 The subquery calculates the average salary.
👉 Each row shows the difference between an employee’s salary and that average.
✅ Key Notes:
- Subqueries can return scalars (single value), lists, or even tables.
- They can be correlated (depend on outer query) or non-correlated (independent).