Subqueries & CTEs in SQL

From the SQL cheat sheet ยท Subqueries & CTEs ยท verified Jul 2026

Subqueries & CTEs

Write nested queries and reusable named expressions.

sql
-- Subquery in WHERE
SELECT * FROM products
WHERE price > (SELECT AVG(price) FROM products);

-- EXISTS
SELECT * FROM customers c
WHERE EXISTS (
  SELECT 1 FROM orders o WHERE o.customer_id = c.id
);

-- CTE (Common Table Expression)
WITH active_users AS (
  SELECT * FROM users WHERE status = 'active'
)
SELECT * FROM active_users WHERE age > 25;
๐Ÿ’ก CTEs make complex queries readable โ€” define named blocks with WITH, then reference them
โšก EXISTS is often faster than IN for large subqueries โ€” it stops at the first match
๐Ÿ“Œ Correlated subqueries run once per outer row โ€” they can be slow on large tables
๐ŸŸข Recursive CTEs are the standard way to query hierarchical data (org charts, categories)
subqueriescteexistsrecursive
Back to the full SQL cheat sheet