SQL FOUNDATIONS:Subqueries
Use subqueries to solve complex problems step-by-step.
SQL Subqueries Explained with Examples + Practice Questions
What are Subqueries
A subquery is a query written inside another query.
It is used to:
- Filter data using another query
- Compare values dynamically
- Solve complex problems step-by-step
When to Use Subqueries
- When result depends on another query
- When filtering based on aggregated values
- When solving interview problems like:
- second highest salary
- above average salary
Example Dataset
Table: employees
Basic Subquery
Example: Employees earning above average salary
sqlSELECT name, salaryFROM employeesWHERE salary > (SELECT AVG(salary) FROM employees);
Types of Subqueries
- Single Row Subquery
Returns one value.
sqlSELECT nameFROM employeesWHERE salary = (SELECT MAX(salary) FROM employees);
- Multiple Row Subquery
Returns multiple values.
sqlSELECT nameFROM employeesWHERE department IN (SELECT department FROM employees WHERE salary > 50000);
- Subquery with EXISTS
Checks if rows exist.
sqlSELECT nameFROM employees eWHERE EXISTS (SELECT 1FROM employeesWHERE department = e.departmentAND salary > 60000);
Subquery in SELECT
sqlSELECT name,(SELECT AVG(salary) FROM employees) AS avg_salaryFROM employees;
Subquery in FROM (Derived Table)
sqlSELECT department, avg_salaryFROM (SELECT department, AVG(salary) AS avg_salaryFROM employeesGROUP BY department) AS dept_avg;
Subquery vs JOIN (Important Insight)
- Subqueries are easier to write
- JOINs are often more efficient
Interviews often accept both approaches.
Key Concepts
- Subquery runs first (inner query)
- Outer query uses its result
- Can return single or multiple values
- Used in WHERE, SELECT, FROM
Common Questions (FAQ)
What is a subquery
A query inside another SQL query used to compute intermediate results.
When should we use subqueries
When logic depends on another query result.
Are subqueries slow
Sometimes, especially nested ones. JOINs can be faster.
Can subqueries return multiple values
Yes, depending on usage (IN, EXISTS).
Internal Learning Links
- Learn Aggregations
- Learn GROUP BY
- Learn JOINs
Subqueries Missions
Solve exercises in sequence to unlock the next mission.
Above average salary
Find employees earning above average salary.
Lowest salary
Find employees with lowest salary.
Departments with salary > 55000
Find employees who work in departments where salary > 55000 exists.
Below average salary
Find employees earning less than average salary.
Second highest salary
Find second highest salary.
Equal to minimum salary
Find employees whose salary is equal to minimum salary.
Departments with avg > 50000
Find departments with average salary greater than 50000.
Above dept average
Find employees whose salary is greater than average of their department.
More than manager
Find employees who earn more than their manager (assume manager_id exists).