집합 연산자 (Set Operators) 정리

TJK·2025년 8월 22일
0

집합 연산자 (Set Operators) 정리

집합 연산자는 여러 개의 SELECT 문을 결합하여 단일 결과 집합을 만드는 데 사용됩니다. SQLD 시험에서는 각 연산자의 차이점, 특히 중복 처리 방식과 성능에 대한 문제가 자주 출제됩니다.


1. 집합 연산자 공통 규칙

핵심 개념 (★★★★★)

  • 결합 방향: 두 개 이상의 SELECT 문의 결과를 **세로(수직)**로 결합합니다.
  • 전제 조건:
    • 컬럼 개수:SELECT 절의 컬럼 수가 동일해야 합니다.
    • 데이터 타입: 각 컬럼의 데이터 타입이 호환 가능해야 합니다.

2. 집합 연산자별 특징 비교

연산자설명중복 처리성능
UNION합집합중복 제거느림
UNION ALL합집합중복 허용가장 빠름
INTERSECT교집합중복 제거느림
MINUS차집합중복 제거느림

3. 각 연산자 상세 정리

UNION (합집합 - 중복 제거)

  • UNION은 두 SELECT 결과의 모든 행을 합치고, 중복된 행은 제거합니다.
  • 내부적으로 중복을 검사하고 제거하는 과정이 있어 UNION ALL보다 느립니다.
  • SQLD 시험: "두 결과 집합을 합치되, 중복 없이"라는 조건이 나오면 UNION이 정답입니다.

UNION ALL (합집합 - 중복 허용)

  • UNION ALL은 두 SELECT 결과의 모든 행을 단순히 합칩니다. 중복된 행이 있어도 그대로 유지됩니다.
  • 중복 검사 과정이 없어 가장 빠릅니다.
  • SQLD 시험: "가장 빠른 집합 연산자"를 묻는 문제의 답입니다.

INTERSECT (교집합)

  • INTERSECT는 두 SELECT 결과에 모두 존재하는 행만 반환합니다.
  • 중복된 행은 자동으로 제거됩니다.
  • SQLD 시험: "두 테이블의 공통된 데이터"를 묻는 문제가 나오면 INTERSECT를 떠올려야 합니다.

MINUS (차집합)

  • MINUS는 첫 번째 SELECT 결과에서 두 번째 SELECT 결과에 존재하는 행을 제외하고 반환합니다.
  • 중복된 행은 자동으로 제거됩니다.
  • SQLD 시험: Oracle은 MINUS, **ANSI 표준은 EXCEPT**를 사용합니다.

4. SQLD 시험 핵심 포인트

  • UNION vs UNION ALL: 중복 제거 여부에 따라 성능이 달라집니다.
  • INTERSECT: 두 집합의 교집합을 구합니다.
  • MINUS (Oracle) / EXCEPT (ANSI): 차집합을 구합니다.
  • 정렬: ORDER BY 절은 가장 마지막 SELECT 문에만 사용할 수 있으며, 전체 결과를 대상으로 정렬합니다.

5. 암기 팁

  • UNION → **유니크(Unique)**하게 중복 제거!
  • UNION ALL올(All) 다 모아, 중복도 다 포함!
  • INTERSECTIn-tersect = 두 집합에 In (존재)하는 것만!
  • MINUS / EXCEPT빼기!

실전 기출 문제 스타일

1. 다음 연산자에 대한 설명으로 옳지 않은 것은?
UNION은 중복을 제거한다.
UNION ALL은 중복을 제거한다.
INTERSECT는 교집합을 구한다.
MINUS는 차집합을 구한다.

2. 성능상 가장 빠른 집합 연산자는?
UNION
UNION ALL
INTERSECT
MINUS

3. 다음 SQL의 실행 결과를 고르시오.

SELECT 'A' AS val
UNION ALL
SELECT 'A';

A
A, A
③ 에러 발생
NULL

4. Oracle에서는 차집합을 표현할 때 사용하는 연산자는?
EXCEPT
MINUS
DIFFERENCE
OUTER JOIN


정답 및 해설

  • 문제 1 정답: ②
    • 해설: UNION ALL은 중복을 제거하지 않습니다. 중복을 제거하는 것은 UNION입니다.
  • 문제 2 정답: ②
    • 해설: UNION ALL은 중복 검사 과정이 없어 가장 빠르고 효율적인 연산자입니다.
  • 문제 3 정답: ②
    • 해설: UNION ALL은 중복된 값도 모두 포함하여 결과를 반환합니다. 따라서 'A'가 두 번 출력됩니다.
  • 문제 4 정답: ②
    • 해설: Oracle에서 차집합 연산자는 MINUS입니다. EXCEPT는 ANSI 표준으로 MySQL 등에서 사용됩니다.
profile
Hello world!

0개의 댓글