T
Tech Town
Log InSign Up Free
← Back to Blog

June 17, 2025 · admin

Subquery

๐Ÿ”„ SQL Subquery Explained โ€“ Mastering Nested Queries with Real Examples

If you’re working with SQL, you’ve probably come across the term subqueryโ€”a query within another query. This tutorial helps you understand what subqueries are, how they work, and where to use them effectively in your SQL projects.

Whether you’re a data analyst, SQL developer, or student, mastering subqueries is essential to solving real-world database problems.


๐Ÿ“˜ What is a SQL Subquery?

A subquery, also called a nested query or inner query, is a query embedded within another SQL query.

It allows you to:

  • Use results from one query inside another
  • Filter or compare data dynamically
  • Build powerful and flexible SQL logic

๐Ÿ” Syntax:

SELECT column_name
FROM table_name
WHERE column_name = (
    SELECT column_name
    FROM another_table
    WHERE condition
);

๐Ÿง  When to Use Subqueries?

SQL subqueries are commonly used in:

  • WHERE clause to filter based on dynamic criteria
  • FROM clause to create virtual tables (derived tables)
  • SELECT clause to include calculated values

๐Ÿ› ๏ธ SQL Subquery Examples

๐Ÿ“Œ 1. Subquery in WHERE Clause

Get all employees who earn more than the average salary:

SELECT emp_name, salary
FROM employees
WHERE salary > (
    SELECT AVG(salary)
    FROM employees
);

๐Ÿ”Ž Explanation: The subquery calculates the average salary, and the outer query returns employees earning above that.


๐Ÿ“Œ 2. Subquery in FROM Clause (Derived Table)

Show department-wise highest salaries:

SELECT dept_id, MAX(salary) AS max_salary
FROM (
    SELECT dept_id, salary
    FROM employees
) AS dept_salaries
GROUP BY dept_id;

๐Ÿ“Œ Use Case: When you want to group or filter the results of a subquery like a temporary table.


๐Ÿ“Œ 3. Subquery in SELECT Clause

Get employee name with their department name using subquery:

SELECT 
  emp_name,
  (SELECT dept_name 
   FROM departments 
   WHERE departments.dept_id = employees.dept_id) AS dept_name
FROM employees;

โœ… Advantage: No need to use JOINs for small related lookups.


๐Ÿ” Correlated vs. Non-Correlated Subqueries

TypeDefinitionExecutes Per Row?
Non-CorrelatedIndependent subquery that runs onceNo
CorrelatedDepends on outer query; runs once per row in outer queryYes

๐Ÿงช Example: Correlated Subquery

SELECT emp_name, salary
FROM employees e
WHERE salary > (
    SELECT AVG(salary)
    FROM employees
    WHERE dept_id = e.dept_id
);

๐Ÿ”„ Here: The subquery uses the outer queryโ€™s dept_idโ€”this is what makes it correlated.


๐Ÿงฉ SQL Subqueries with IN, ANY, ALL, EXISTS

โœ… Subquery with IN

SELECT emp_name
FROM employees
WHERE dept_id IN (
    SELECT dept_id
    FROM departments
    WHERE location = 'Delhi'
);

๐Ÿ” Subquery with EXISTS

SELECT dept_name
FROM departments d
WHERE EXISTS (
    SELECT 1
    FROM employees e
    WHERE e.dept_id = d.dept_id
);

๐Ÿ“Œ Subquery with ALL

SELECT emp_name
FROM employees
WHERE salary > ALL (
    SELECT salary
    FROM employees
    WHERE dept_id = 2
);

๐Ÿšซ SQL Subquery Limitations

  • Some RDBMS restrict subqueries in certain clauses like LIMIT, ORDER BY
  • Complex subqueries may impact performance
  • Use JOINs when appropriateโ€”theyโ€™re often more efficient than subqueries

๐Ÿ’ก Best Practices

  • Prefer correlated subqueries only when needed
  • Replace repetitive subqueries with Common Table Expressions (CTEs) or derived tables
  • Analyze performance with EXPLAIN or query execution plans

๐Ÿ” Related SQL Tutorials