Introduction
A correlated subquery helps find related data by using values from the main query. It runs once for each row in the main query to give precise matching results.
Jump into concepts and practice - no test required
SELECT column1, column2 FROM table1 WHERE column3 operator ( SELECT columnX FROM table2 WHERE table2.columnY = table1.columnZ );
SELECT e.name FROM employees e WHERE e.salary > ( SELECT AVG(salary) FROM employees WHERE department = e.department );
SELECT c.customer_id, c.name FROM customers c WHERE EXISTS ( SELECT 1 FROM orders o WHERE o.customer_id = c.customer_id AND o.order_date > '2024-01-01' );
CREATE TABLE employees ( id INT, name VARCHAR(50), department VARCHAR(50), salary INT ); INSERT INTO employees VALUES (1, 'Alice', 'Sales', 5000), (2, 'Bob', 'Sales', 4000), (3, 'Charlie', 'HR', 4500), (4, 'Diana', 'HR', 5500); SELECT name, salary FROM employees e WHERE salary > ( SELECT AVG(salary) FROM employees WHERE department = e.department );
employees(id, name, department, salary) and the query:SELECT e1.name FROM employees e1 WHERE e1.salary > (SELECT AVG(e2.salary) FROM employees e2 WHERE e2.department = e1.department);
SELECT c.customer_id FROM customers c WHERE c.orders_count > (SELECT AVG(o.orders_count) FROM orders o WHERE o.customer_id = c.customer_id);