Skip to content
Home Tutorials Roadmaps Courses
Log in Join free
Tutorials MySQL Subqueries
MySQL Intermediate FREE

Subqueries

Lesson 1 of 16 Intermediate Interactive

Subqueries are queries inside other queries.

Types

  • IN � match against subquery results
  • EXISTS � check if subquery returns rows
  • Correlated � references outer query

Syntax

MYSQL
SELECT * FROM users WHERE id IN (SELECT user_id FROM orders WHERE total > 100);

SELECT * FROM users u WHERE EXISTS (
    SELECT 1 FROM orders o WHERE o.user_id = u.id
);

SELECT name, (SELECT COUNT(*) FROM orders o WHERE o.user_id = u.id) AS order_count
FROM users u;
Subqueries
SQL
-- Subquery in WHERE
SELECT name, age
FROM users
WHERE age > (SELECT AVG(age) FROM users);

-- Subquery with IN
SELECT name
FROM users
WHERE id IN (
    SELECT user_id FROM orders WHERE total > 100
);

-- Correlated subquery
SELECT u.name, (
    SELECT COUNT(*)
    FROM orders o
    WHERE o.user_id = u.id
) AS order_count
FROM users u;

-- Subquery in FROM
SELECT city, total FROM (
    SELECT city, COUNT(*) AS total
    FROM users
    GROUP BY city
) AS stats
WHERE total > 5;

Practice

1
Exercise

Find users who ordered more than 5 times.

Answer
SELECT name FROM users
WHERE id IN (
    SELECT user_id FROM orders GROUP BY user_id HAVING COUNT(*) > 5
);

Quick Quiz

1

IN vs EXISTS?

IN is better for small result sets. EXISTS is better when the subquery is large.

Interview Questions

Subqueries for readability and when checking existence. JOINs for combining columns from multiple tables or when performance matters.