#1 Data Analytics Program in India
₹2,499₹1,499Enroll Now
5 min read
Question 7 of 29medium

What are subqueries in SQL?

Using queries within queries.

What You'll Learn

  • Subquery types
  • WHERE subqueries
  • FROM subqueries

Subquery in WHERE

query.sqlSQL
-- Users who have placed orders
SELECT * FROM users
WHERE id IN (SELECT DISTINCT user_id FROM orders);

-- Products above average price
SELECT * FROM products
WHERE price > (SELECT AVG(price) FROM products);

-- Users with no orders
SELECT * FROM users
WHERE id NOT IN (SELECT user_id FROM orders);

Subquery in FROM (Derived Table)

query.sqlSQL
-- Top spending users
SELECT u.name, totals.total_spent
FROM users u
JOIN (
  SELECT user_id, SUM(total) as total_spent
  FROM orders
  GROUP BY user_id
) totals ON u.id = totals.user_id
ORDER BY totals.total_spent DESC
LIMIT 10;

Subquery in SELECT

query.sqlSQL
SELECT
  name,
  price,
  (SELECT AVG(price) FROM products) as avg_price,
  price - (SELECT AVG(price) FROM products) as diff_from_avg
FROM products;

Correlated Subquery

References outer query (runs for each row).

query.sqlSQL
-- Users whose orders exceed their average
SELECT * FROM orders o
WHERE total > (
  SELECT AVG(total)
  FROM orders
  WHERE user_id = o.user_id
);

-- Latest order for each user
SELECT * FROM orders o1
WHERE created_at = (
  SELECT MAX(created_at)
  FROM orders o2
  WHERE o2.user_id = o1.user_id
);

EXISTS

query.sqlSQL
-- Users with at least one order
SELECT * FROM users u
WHERE EXISTS (
  SELECT 1 FROM orders o WHERE o.user_id = u.id
);