SQL Subqueries
Using nested queries
Subquery in WHERE
SELECT * FROM users
WHERE age > (SELECT AVG(age) FROM users); # subquery returns single value
Subquery with IN
SELECT * FROM products
WHERE category_id IN (
SELECT id FROM categories WHERE active = 1
); # subquery returns multiple values
Subquery in FROM
SELECT avg_price
FROM (
SELECT AVG(price) AS avg_price FROM products GROUP BY category
) AS subquery; # derived table
Correlated Subquery
SELECT name, salary
FROM employees e1
WHERE salary > (
SELECT AVG(salary) FROM employees e2
WHERE e1.department = e2.department
); # references outer query
EXISTS
SELECT * FROM users u
WHERE EXISTS (
SELECT 1 FROM orders o WHERE o.user_id = u.id
); # check if exists