서브쿼리
2026년 8월 28일
서브쿼리
- 서브쿼리는 쿼리 안에 든 쿼리다. 괄호로 감싸고, 쓰이는 자리에 따라 이름과 성질이 다르다.
놓이는 자리 넷
SQL
상관 서브쿼리 (correlated)
바깥 쿼리의 열을 참조하는 서브쿼리다.
SQL
Mermaid스크롤로 확대 · 드래그로 이동
상관 서브쿼리는 바깥 행마다 도는 게 기본이다. 행이 많으면 JOIN이나 윈도우 함수로 바꾸는 걸 먼저 검토한다.
IN vs EXISTS vs JOIN
| 방식 | 언제 |
|---|---|
IN (서브쿼리) | 목록이 작고 중복이 없을 때. 읽기 쉽다 |
EXISTS | 있는지만 확인하면 될 때. 첫 건에서 멈춘다 |
JOIN | 상대 테이블의 값도 필요할 때 |
SQL
NOT IN의 NULL 함정
SQL
서브쿼리 결과에 NULL이 하나라도 있으면 전체가 UNKNOWN이 되어 0건이 나온다 (NULL과 3값 논리). 안전한 형태는 둘이다.
SQL
스칼라 서브쿼리는 정말 하나여야 한다
SQL
LIMIT 1이나 집계 함수로 하나임을 보장한다.
서브쿼리 대신 CTE
중첩이 깊어지면 읽기가 어렵다. 같은 걸 CTE로 펴면 위에서 아래로 읽힌다.
SQL
한 줄 정리
서브쿼리는 놓이는 자리로 성질이 갈리고, 존재 확인은 EXISTS, NOT IN은 NULL 때문에 피하며, 깊어지면 CTE로 편다.
관련
- SELECT 문법
- WHERE와 조건식
- JOIN
- CTE와 윈도우 함수
- NULL과 3값 논리
- GROUP BY와 집계 함수