DEV Community

Cover image for SQL subqueries: [Step-By-Step] Guide
Christopher Garzon
Christopher Garzon

Posted on

SQL subqueries: [Step-By-Step] Guide

What is SQL Subqueries

SQL subqueries, a fundamental concept in the realm of database management and data analysis, are essentially queries within queries. They enable a more nuanced and powerful approach to data retrieval, allowing for sophisticated operations that go beyond the capabilities of a single standard SQL query. Understanding subqueries is pivotal for anyone looking to deepen their SQL proficiency and leverage the full potential of SQL for complex data tasks.

Defining SQL Subqueries

At its core, a subquery is an SQL query nested inside another SQL query. The main query, often called the outer query, can incorporate a subquery in its SELECT, FROM, or WHERE clauses, among others. This nesting allows the result of the subquery to serve as a condition or data source for the outer query, enabling operations that rely on intermediate results or the dynamic generation of criteria for data filtering, aggregation, or manipulation.

How Subqueries Differ from Regular Queries

Unlike regular queries that operate independently to retrieve data directly from tables within a database, subqueries provide a layer of abstraction and flexibility. They allow for the execution of queries that depend on the outcomes of other queries, enabling a sequential approach to data retrieval. This capability is beneficial for complex data analysis tasks where the answer to one question depends on the answers to several underlying questions.
Basic Syntax of Subqueries
Subqueries can be used in various parts of an SQL statement, including SELECT, FROM, and WHERE clauses, each serving different purposes and offering unique benefits. Let’s delve into the syntax and practical applications of subqueries across these clauses, enhancing your SQL toolkit with powerful querying techniques. Mastering these techniques is not just about improving your SQL skills; it’s about preparing yourself for the challenging scenarios you’ll face in data engineering interviews and on the job.

For those who are beginning their journey into the world of SQL or looking to solidify their foundational knowledge, DE Academy offers a SQL Tutorial Course. This course provides a step-by-step guide through the basics of SQL, gradually advancing to more complex concepts and operations, including subqueries. It’s an ideal starting point for aspiring data engineers committed to building a strong foundation in SQL.

By combining the practical, real-world applications covered in our SQL Data Engineer Interview Course with the foundational skills taught in our SQL Tutorial Course, you’re setting yourself up for success. You’ll not only be prepared to tackle any SQL challenges thrown your way during interviews but also be well-equipped to handle the demands of a data engineering role.

Basic Syntax of Subqueries

The basic syntax of a subquery involves nesting an SQL SELECT statement inside another SQL statement. The nested SELECT statement, or the subquery, is enclosed in parentheses, distinguishing it from the main, or outer, query.

SELECT column_name(s)
FROM table_name
WHERE column_name OPERATOR
    (SELECT column_name FROM table_name WHERE condition);
Using Subqueries in SELECT 
Enter fullscreen mode Exit fullscreen mode

Subqueries within SELECT clauses allow you to perform calculations or aggregate data for each row returned by the outer query. This is particularly useful for incorporating dynamic values into your result set that are dependent on conditions evaluated per row.

SELECT employee_id, 
       (SELECT AVG(salary) 
        FROM salaries 
        WHERE department = employee.department) AS avg_department_salary
FROM employee;
This query calculates the average salary for each employee’s department, displaying it alongside employee IDs.

Enter fullscreen mode Exit fullscreen mode

Subqueries in the FROM

In the FROM clause, subqueries act as derived tables, providing a temporary table from which the outer query can select. This technique is useful for simplifying complex queries by breaking them down into manageable parts.

`SELECT a.employee_name, b.avg_salary
FROM employee a
JOIN (SELECT department, AVG(salary) AS avg_salary FROM salaries GROUP BY department) b
ON a.department = b.department;
Here, the subquery creates a temporary table of average salaries by department, which is then joined to the employee table.
Enter fullscreen mode Exit fullscreen mode

Subqueries in the WHERE

When used in the WHERE clause, subqueries filter the rows returned by the outer query based on a condition that matches a set of values returned by the subquery.

SELECT employee_name
FROM employee
WHERE department IN 
    (SELECT department FROM departments WHERE head = 'John Doe');
Enter fullscreen mode Exit fullscreen mode

This query selects employees who are in departments headed by John Doe.

Correlated Subqueries

Correlated subqueries reference column(s) from the outer query, making the subquery’s execution dependent on the outer query. They are powerful tools for row-by-row operations.

SELECT e.employee_name, e.salary
FROM employee e
WHERE e.salary > 
    (SELECT AVG(salary) FROM employee WHERE department = e.department);
Enter fullscreen mode Exit fullscreen mode

This correlated subquery compares each employee’s salary against the average salary of their department, selecting those who earn above the average.

Understanding and utilizing subqueries across SELECT, FROM, and WHERE clauses, including mastering the intricacies of correlated subqueries, significantly enhances your ability to write complex, efficient SQL queries. By breaking down data retrieval tasks into simpler, logical components, subqueries empower you to tackle sophisticated data analysis challenges with ease.

LEARN SQL FREE

Top comments (0)