SELECT 안의 SELECT
Subquery 는 다른 statement 안에 nested 된 SELECT. 흔한 모양 4 개:
- Scalar subquery — 한 값 반환, 컬럼이나 비교에 사용:
SELECT name, (SELECT count(*) FROM messages WHERE conversation_id = c.id) AS n FROM conversations c; - IN subquery — set 반환,
IN의 right-hand side. - EXISTS subquery — true/false 반환:
WHERE EXISTS (SELECT 1 FROM messages m WHERE m.conversation_id = c.id). - Derived 테이블 — FROM 에 사용:
FROM (SELECT brain, count(*) AS n FROM messages GROUP BY brain) AS sub WHERE sub.n > 100;
Tip: 많은 subquery 가 join 또는 CTE 로 다시 쓸 수 있고 가끔 그게 더 빠름.
EXPLAIN QUERY PLAN (track 5) 으로 비교. 깊게 nested 된 로직이면 CTE (track 8) 가 보통 nested subquery 보다 잘 읽혀.