집합 연산자는 여러 개의 SELECT
문을 결합하여 단일 결과 집합을 만드는 데 사용됩니다. SQLD 시험에서는 각 연산자의 차이점, 특히 중복 처리 방식과 성능에 대한 문제가 자주 출제됩니다.
SELECT
문의 결과를 **세로(수직)**로 결합합니다.SELECT
절의 컬럼 수가 동일해야 합니다.연산자 | 설명 | 중복 처리 | 성능 |
---|---|---|---|
UNION | 합집합 | 중복 제거 | 느림 |
UNION ALL | 합집합 | 중복 허용 | 가장 빠름 |
INTERSECT | 교집합 | 중복 제거 | 느림 |
MINUS | 차집합 | 중복 제거 | 느림 |
UNION
(합집합 - 중복 제거)UNION
은 두 SELECT
결과의 모든 행을 합치고, 중복된 행은 제거합니다.UNION ALL
보다 느립니다.UNION
이 정답입니다.UNION ALL
(합집합 - 중복 허용)UNION ALL
은 두 SELECT
결과의 모든 행을 단순히 합칩니다. 중복된 행이 있어도 그대로 유지됩니다.INTERSECT
(교집합)INTERSECT
는 두 SELECT
결과에 모두 존재하는 행만 반환합니다.INTERSECT
를 떠올려야 합니다.MINUS
(차집합)MINUS
는 첫 번째 SELECT
결과에서 두 번째 SELECT
결과에 존재하는 행을 제외하고 반환합니다.MINUS
, **ANSI 표준은 EXCEPT
**를 사용합니다.UNION
vs UNION ALL
: 중복 제거 여부에 따라 성능이 달라집니다.INTERSECT
: 두 집합의 교집합을 구합니다.MINUS
(Oracle) / EXCEPT
(ANSI): 차집합을 구합니다.ORDER BY
절은 가장 마지막 SELECT
문에만 사용할 수 있으며, 전체 결과를 대상으로 정렬합니다.UNION
→ **유니크(Unique)
**하게 중복 제거!UNION ALL
→ 올(All)
다 모아, 중복도 다 포함!INTERSECT
→ In-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
UNION ALL
은 중복을 제거하지 않습니다. 중복을 제거하는 것은 UNION
입니다.UNION ALL
은 중복 검사 과정이 없어 가장 빠르고 효율적인 연산자입니다.UNION ALL
은 중복된 값도 모두 포함하여 결과를 반환합니다. 따라서 'A'가 두 번 출력됩니다.MINUS
입니다. EXCEPT
는 ANSI 표준으로 MySQL 등에서 사용됩니다.