0
0
SQLquery~7 mins

Subquery vs JOIN performance trade-off in SQL

Choose your learning style9 modes available
Introduction

We want to get data from multiple tables efficiently. Sometimes we use subqueries, other times JOINs. Knowing which is faster helps your database work better.

When you want to filter rows based on another table's data.
When you need to combine related data from two tables into one result.
When you want to check if a value exists in another table.
When you want to improve query speed by choosing the best method.
When you want to write clear and easy-to-understand queries.
Syntax
SQL
-- Subquery example
SELECT column1 FROM table1 WHERE column2 IN (SELECT column2 FROM table2);

-- JOIN example
SELECT t1.column1, t2.column2 FROM table1 t1 JOIN table2 t2 ON t1.column2 = t2.column2;

Subqueries run inside another query and can be simple or complex.

JOINs combine rows from two tables based on a related column.

Examples
This subquery finds employees working in departments located in NY.
SQL
SELECT name FROM employees WHERE department_id IN (SELECT id FROM departments WHERE location = 'NY');
This JOIN gets employee names and their department locations, filtering for NY.
SQL
SELECT e.name, d.location FROM employees e JOIN departments d ON e.department_id = d.id WHERE d.location = 'NY';
This subquery uses EXISTS to check if the employee's department is in NY.
SQL
SELECT name FROM employees WHERE EXISTS (SELECT 1 FROM departments WHERE id = employees.department_id AND location = 'NY');
Sample Program

This example shows two ways to get employees working in NY departments: one with a subquery and one with a JOIN.

SQL
CREATE TABLE departments (id INT, location VARCHAR(20));
CREATE TABLE employees (id INT, name VARCHAR(20), department_id INT);

INSERT INTO departments VALUES (1, 'NY'), (2, 'LA');
INSERT INTO employees VALUES (1, 'Alice', 1), (2, 'Bob', 2), (3, 'Carol', 1);

-- Using subquery
SELECT name FROM employees WHERE department_id IN (SELECT id FROM departments WHERE location = 'NY');

-- Using JOIN
SELECT e.name FROM employees e JOIN departments d ON e.department_id = d.id WHERE d.location = 'NY';
OutputSuccess
Important Notes

JOINs often perform better than subqueries because databases optimize them well.

Subqueries can be easier to read for simple filters but might be slower on large data.

Always test both methods on your data to see which is faster.

Summary

Subqueries and JOINs both get data from multiple tables.

JOINs usually run faster but can be more complex to write.

Choose based on readability and performance for your situation.