Introduction
Correlated subqueries let you compare each row in one table with rows in another table. They help find related data by checking conditions row by row.
SELECT column1, column2 FROM table1 t1 WHERE column3 > ( SELECT AVG(column3) FROM table2 t2 WHERE t2.related_column = t1.related_column );
SELECT e.employee_id, e.salary FROM employees e WHERE e.salary > ( SELECT AVG(salary) FROM employees WHERE department_id = e.department_id );
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.total > 100 );
CREATE TABLE departments ( department_id INT PRIMARY KEY, department_name VARCHAR(50) ); CREATE TABLE employees ( employee_id INT PRIMARY KEY, name VARCHAR(50), salary DECIMAL(10,2), department_id INT, FOREIGN KEY (department_id) REFERENCES departments(department_id) ); INSERT INTO departments VALUES (1, 'Sales'), (2, 'Engineering'); INSERT INTO employees VALUES (101, 'Alice', 70000, 1), (102, 'Bob', 60000, 1), (103, 'Charlie', 80000, 2), (104, 'Diana', 90000, 2); SELECT e.name, e.salary FROM employees e WHERE e.salary > ( SELECT AVG(salary) FROM employees WHERE department_id = e.department_id );
employees(id, name, department_id, salary)departments(id, name)SELECT e.name FROM employees e WHERE e.salary > (SELECT AVG(salary) FROM employees WHERE department_id = e.department_id);
SELECT e1.name FROM employees e1 WHERE salary > (SELECT AVG(salary) FROM employees e2 WHERE e2.department = e1.department_id);
Pass the test and this pattern moves unknown