SQLD
2과목
9
업데이트 2026.08.08

서브쿼리와 집합 연산자 정리: IN·EXISTS·UNION 차이

단일행·다중행 서브쿼리, 상관 서브쿼리, IN·EXISTS와 UNION·UNION ALL·INTERSECT·MINUS의 차이를 정리합니다.

이 글의 핵심

비교 연산자는 서브쿼리가 반환하는 행 수와 열 수에 맞아야 합니다.

EXISTS는 서브쿼리 결과값보다 관련 행의 존재 여부를 검사합니다.

UNION은 중복을 제거하고 UNION ALL은 중복을 유지합니다.

서브쿼리는 반환 형태부터 확인한다

서브쿼리를 보면 먼저 몇 개의 열과 몇 개의 행을 반환하는지 예상해야 합니다. 단일행 비교 연산자 =, <, >는 한 행이 반환된다는 전제가 필요하고, 여러 행이 가능하면 IN, ANY, ALL 같은 연산자를 검토합니다.

집계 함수만 SELECT하고 GROUP BY가 없다면 보통 한 행을 반환합니다. 반대로 부서별 GROUP BY가 있으면 부서 수만큼 여러 행이 나올 수 있습니다.

IN과 EXISTS를 의미로 구분하기

IN은 왼쪽 값이 오른쪽 결과 집합의 값 중 하나와 같은지 비교합니다. EXISTS는 상관 조건을 만족하는 행이 하나라도 존재하는지만 확인합니다.

“주문한 적 있는 고객”은 고객별 관련 주문의 존재 여부이므로 EXISTS로 자연스럽게 표현할 수 있습니다. EXISTS 안의 SELECT 목록은 존재 판단 자체에 영향을 주지 않아 관례적으로 SELECT 1을 사용합니다.

관련 주문이 있는 고객
SELECT c.customer_id
FROM customers c
WHERE EXISTS (
  SELECT 1
  FROM orders o
  WHERE o.customer_id = c.customer_id
);

상관 서브쿼리는 바깥 행을 참조한다

상관 서브쿼리는 내부 쿼리가 바깥 쿼리의 현재 행 값을 참조합니다. 개념적으로 바깥 행마다 관련 조건을 평가하므로 독립적으로 실행할 수 없는 형태입니다.

시험에서는 별칭의 범위를 확인하세요. 안쪽 블록에서 바깥 별칭을 참조할 수 있지만, 바깥 블록이 안쪽에서만 정의된 별칭을 참조할 수는 없습니다.

집합 연산자는 결과를 세로로 결합한다

조인이 열을 가로로 연결한다면 집합 연산자는 두 SELECT 결과의 행을 세로로 결합합니다. 각 SELECT는 열 개수가 같고 대응 열의 데이터 유형이 호환되어야 합니다.

연산자결과중복 처리
UNION두 결과의 합집합중복 제거
UNION ALL두 결과를 그대로 연결중복 유지
INTERSECT양쪽에 공통인 행중복 제거
MINUS / EXCEPT첫 결과에만 있는 행중복 제거

ORDER BY와 열 이름의 기준

집합 연산자로 여러 SELECT를 결합할 때 ORDER BY는 전체 결과의 마지막에 한 번 사용합니다. 최종 열 이름은 일반적으로 첫 번째 SELECT의 열 이름이나 별칭을 따릅니다.

UNION의 중복 제거가 필요하지 않다면 UNION ALL이 의미를 더 정확히 표현하고 불필요한 중복 제거 작업도 피할 수 있습니다. 다만 시험에서는 성능 추측보다 요구된 중복 처리 여부를 먼저 판단하세요.

서브쿼리와 집합 연산자 문제는 “행 수·열 수·NULL·중복” 네 항목을 먼저 표시하면 대부분의 함정을 찾을 수 있습니다.


자주 묻는 질문

스칼라 서브쿼리는 여러 행을 반환할 수 있나요?

하나의 값이 필요한 위치에 사용되므로 한 행 한 열을 반환해야 합니다. 결과가 없으면 NULL이 될 수 있고 여러 행이면 오류가 발생합니다.

UNION과 JOIN은 언제 구분해서 사용하나요?

같은 구조의 결과 행을 위아래로 합치려면 UNION 계열을, 관련된 테이블의 열을 옆으로 연결하려면 JOIN을 사용합니다.

시험 과목과 합격 기준은 KDATA SQL 개발자 공식 안내를 기준으로 확인했습니다. 가풀은 시험 주관기관의 공식 서비스가 아니며, 일정과 규정은 접수 전 공식 공고를 다시 확인해야 합니다.

2과목

SQL JOIN 완전 정리: INNER·OUTER·SELF JOIN 결과 읽는 법

읽기
2과목

GROUP BY와 HAVING 차이: SQLD 집계 문제 실수 줄이기

읽기
2과목

SQL NULL 완전 정리: COUNT·비교 연산·NVL에서 틀리지 않는 법

읽기