집합 연산자
쉽게 말하면
집합 연산자는 두 SELECT 결과를 위아래로 합치거나 비교해요. UNION ALL은 그냥 이어 붙이기, UNION은 이어 붙이고 겹치는 줄 지우기, INTERSECT는 양쪽에 다 있는 줄, MINUS는 첫 번째에만 있는 줄이에요. 두 결과의 칸 수와 자료 종류가 맞아야 합칠 수 있어요.
시험용 정의
집합 연산자는 두 SELECT 결과를 집합처럼 합친다. UNION(합집합, 중복 제거), UNION ALL(합집합, 중복 포함), INTERSECT(교집합), MINUS(차집합, SQL Server는 EXCEPT). 두 SELECT의 열 개수와 자료형이 맞아야 하고, 결과 열 이름은 첫 번째 SELECT를 따른다. ORDER BY는 맨 마지막에 한 번만 쓴다.
비유로 이해하기
두 반 출석부를 합치는 것이다. UNION ALL은 그냥 위아래로 이어 붙이기, UNION은 이어 붙인 뒤 같은 이름 지우기, INTERSECT는 두 반에 모두 있는 이름, MINUS는 첫 반에만 있는 이름.
자세히
먼저 알아 둘 말
| 말 | 뜻 |
|---|---|
| 합집합 | 두 집합의 원소를 모두 모은 것 |
| 교집합 | 두 집합에 공통으로 있는 원소 |
| 차집합 | 앞 집합에는 있고 뒤 집합에는 없는 원소 |
| 중복 제거 | UNION·INTERSECT·MINUS는 결과에서 같은 행을 하나로 줄인다. 이 과정에서 정렬이 일어나기도 한다 |
네 가지 집합 연산자
| 연산자 | 뜻 | 중복 | 예 (A = 1,2,2,3 / B = 2,3,4) |
|---|---|---|---|
| UNION | 합집합 | 제거 | 1, 2, 3, 4 |
| UNION ALL | 합집합 | 그대로 | 1, 2, 2, 3, 2, 3, 4 |
| INTERSECT | 교집합 | 제거 | 2, 3 |
| MINUS / EXCEPT | 차집합 (A - B) | 제거 | 1 |
규칙
- 각 SELECT의 열 개수가 같아야 한다 (다르면 ORA-01789)
- 같은 위치 열끼리 자료형이 맞아야 한다
- 결과 열 이름과 별칭은 첫 번째 SELECT의 것을 쓴다
- ORDER BY는 맨 끝에 한 번, 첫 SELECT의 열 이름이나 위치 번호로
- Oracle에서는 집합 연산자의 우선순위가 같아 위에서부터 차례로 계산한다. 순서를 바꾸려면 괄호를 쓴다
- UNION ALL은 중복 제거(정렬) 작업이 없어 가장 빠르다. 중복이 없다는 걸 알면 UNION ALL을 쓴다
OUTER JOIN과의 관계
FULL OUTER JOIN은 LEFT OUTER JOIN 결과와 RIGHT OUTER JOIN 결과의 UNION과 같다. 집합 연산자로 조인 결과를 만들 수도 있다.
시험에 이렇게 나와요
- UNION vs UNION ALL 결과 행 수
- INTERSECT·MINUS 결과값 고르기, MINUS는 순서에 따라 결과가 다름
- 열 개수·자료형 일치, 결과 열 이름은 첫 SELECT
- ORDER BY는 마지막에 한 번
- Oracle MINUS = SQL Server EXCEPT
출제 범위·공식 안내 기반
확인 문제
Q1. 10번 부서 직무(CEO, CLERK)와 30번 부서 직무(MANAGER, SALES, SALES, SALES)를 UNION ALL로 합치면 몇 행일까요?
- 3
- 4
- 5
- 6
정답 보기
4번 6
UNION ALL은 중복을 없애지 않고 그대로 붙인다. 2 + 4 = 6행. UNION이었다면 중복 SALES를 하나로 줄여 4행이다.
Q2. A = (1, 1, 2), B = (2, 3)일 때 A UNION ALL B와 A UNION B의 행 수는?
- 5, 5
- 5, 3
- 4, 3
- 3, 3
정답 보기
2번 5, 3
UNION ALL은 3 + 2 = 5, UNION은 중복을 없애 1, 2, 3 → 3.
Q3. 집합 연산자에 대한 설명으로 틀린 것은?
- 각 SELECT의 열 개수가 같아야 한다
- UNION ALL은 중복을 제거하지 않는다
- ORDER BY는 맨 마지막에 한 번 쓴다
- 결과 열 이름은 마지막 SELECT를 따른다
정답 보기
4번 결과 열 이름은 마지막 SELECT를 따른다
결과 열 이름은 첫 번째 SELECT를 따른다.
Q4. SQL Server에서 Oracle의 MINUS와 같은 연산자는?
- DIFFERENCE
- NOT UNION
- EXCEPT
- SUBTRACT
정답 보기
3번 EXCEPT
EXCEPT다. 첫 결과에서 둘째 결과에 있는 행을 뺀다. Oracle은 MINUS, SQL Server와 표준은 EXCEPT를 쓴다.
Q5. A = (1, 2, 3), B = (2, 3, 4)일 때 A INTERSECT B의 결과는?
- 1, 4
- 1, 2, 3, 4
- 2, 3
- 1
정답 보기
3번 2, 3
2, 3이다. INTERSECT는 양쪽에 모두 있는 값(교집합)만 남긴다. UNION이면 1, 2, 3, 4, A MINUS B면 1이다.
Q6. 같은 A, B에서 A MINUS B의 결과는?
- 1, 4
- 4
- 2, 3
- 1
정답 보기
4번 1
A에만 있는 값이다. B MINUS A는 4.
헷갈리기 쉬운 O·X
A MINUS B와 B MINUS A의 결과는 항상 같다.
정답 보기
X 차집합은 순서가 중요하다.
UNION은 결과에서 중복 행을 제거한다.
정답 보기
O 중복 제거가 필요 없으면 UNION ALL이 더 빠르다.
집합 연산자로 합칠 SELECT마다 각각 ORDER BY를 쓸 수 있다.
정답 보기
X ORDER BY는 전체 결과에 대해 맨 끝에 한 번만.