공든탑앱 열기

집합 연산자

SQLD (SQL 개발자) · 서브쿼리와 집합 연산 · 약 11분

쉽게 말하면

집합 연산자는 두 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과 같다. 집합 연산자로 조인 결과를 만들 수도 있다.

시험에 이렇게 나와요

출제 범위·공식 안내 기반

확인 문제

Q1. 10번 부서 직무(CEO, CLERK)와 30번 부서 직무(MANAGER, SALES, SALES, SALES)를 UNION ALL로 합치면 몇 행일까요?

  1. 3
  2. 4
  3. 5
  4. 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의 행 수는?

  1. 5, 5
  2. 5, 3
  3. 4, 3
  4. 3, 3
정답 보기

2번 5, 3

UNION ALL은 3 + 2 = 5, UNION은 중복을 없애 1, 2, 3 → 3.

Q3. 집합 연산자에 대한 설명으로 틀린 것은?

  1. 각 SELECT의 열 개수가 같아야 한다
  2. UNION ALL은 중복을 제거하지 않는다
  3. ORDER BY는 맨 마지막에 한 번 쓴다
  4. 결과 열 이름은 마지막 SELECT를 따른다
정답 보기

4번 결과 열 이름은 마지막 SELECT를 따른다

결과 열 이름은 첫 번째 SELECT를 따른다.

Q4. SQL Server에서 Oracle의 MINUS와 같은 연산자는?

  1. DIFFERENCE
  2. NOT UNION
  3. EXCEPT
  4. SUBTRACT
정답 보기

3번 EXCEPT

EXCEPT다. 첫 결과에서 둘째 결과에 있는 행을 뺀다. Oracle은 MINUS, SQL Server와 표준은 EXCEPT를 쓴다.

Q5. A = (1, 2, 3), B = (2, 3, 4)일 때 A INTERSECT B의 결과는?

  1. 1, 4
  2. 1, 2, 3, 4
  3. 2, 3
  4. 1
정답 보기

3번 2, 3

2, 3이다. INTERSECT는 양쪽에 모두 있는 값(교집합)만 남긴다. UNION이면 1, 2, 3, 4, A MINUS B면 1이다.

Q6. 같은 A, B에서 A MINUS B의 결과는?

  1. 1, 4
  2. 4
  3. 2, 3
  4. 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는 전체 결과에 대해 맨 끝에 한 번만.

함께 보면 좋은 개념