SQL Practice Logo

SQLPractice Online

Correlated Subqueries Deep Dive: Functions

Module: Subqueries & CTEs

-- ============================================

-- BASIC CORRELATED SUBQUERY PATTERN

-- ============================================

-- Compare each employee to their department average

SELECT

e1.employee_id,

e1.name,

e1.department,

e1.salary,

(SELECT AVG(e2.salary) -- Correlated subquery

FROM employees e2

WHERE e2.department = e1.department) AS dept_avg -- References e1!

FROM employees e1

WHERE e1.salary > (

SELECT AVG(e2.salary)

FROM employees e2

WHERE e2.department = e1.department -- References e1 again!

);

-- Execution for 10,000 employees:

-- 1. Row 1 (Alice, Engineering): Calculate Engineering avg

-- 2. Row 2 (Bob, Engineering): Calculate Engineering avg AGAIN

-- 3. Row 3 (Carol, Sales): Calculate Sales avg

-- ... 10,000 total executions

-- Required index for performance:

CREATE INDEX idx_employees_dept_salary

ON employees(department, salary);

-- ============================================

-- CORRELATED EXISTS PATTERN

-- ============================================

-- Find customers who have placed high-value orders

SELECT

c.customer_id,

c.name,

c.email

FROM customers c

WHERE EXISTS (

SELECT 1

FROM orders o

WHERE o.customer_id = c.customer_id -- Correlated: references c

AND o.total > 1000