Subqueries are queries inside other queries.
Types
IN� match against subquery resultsEXISTS� check if subquery returns rows- Correlated � references outer query
Subqueries are queries inside other queries.
IN � match against subquery resultsEXISTS � check if subquery returns rowsSELECT * 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;
-- 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;
Find users who ordered more than 5 times.
SELECT name FROM users
WHERE id IN (
SELECT user_id FROM orders GROUP BY user_id HAVING COUNT(*) > 5
);
IN vs EXISTS?
IN is better for small result sets. EXISTS is better when the subquery is large.
Subqueries for readability and when checking existence. JOINs for combining columns from multiple tables or when performance matters.