mun dev

[SQL] 집합 연산자 정리 (UNION, INTERSECT...) 본문

DB/Oracle

[SQL] 집합 연산자 정리 (UNION, INTERSECT...)

mndev 2024. 1. 24. 14:00

집합 연산자 정리


1. UNION 합집합

UNION은 합집합의 개념이다. 철수와 영희가 듣는 과목을 각각 조회한 쿼리 UNION으로 처리하면 철수와 영희가 듣는 국어와 영어는 한 번만 나오게 된다.

 

timetable

id name subject
1 철수 국어
2 철수 영어
3 철수 수학
4 영희 국어
5 영희 영어

 

 

select subject
from timetable
where name = '철수'

union

select subject
from timetable
where name = '영희';

 

결과 

subject
국어
영어
수학

 

2. UNION ALL

UNION과 유사하지만 차이점은 중복된 항목도 모두 조회한다는 것이다.

 

timetable

id name subject
1 철수 국어
2 철수 영어
3 철수 수학
4 영희 국어
5 영희 영어

 

select subject
from timetable
where name = '철수'

union all 

select subject
from timetable
where name = '영희';

 

 

결과 

subject
국어
영어
국어
영어
수학

 

3. INTERSECT

교집합을 의미한다. 사용 예와 결과 예는 아래와 같다.

 

timetable

id name subject
1 철수 국어
2 철수 영어
3 철수 수학
4 영희 국어
5 영희 영어

 

select subject
from timetable
where name = '철수'

intersect

select subject
from timetable
where name = '영희';

 

 

결과 

subject
국어
영어

 

4. MINUS

차집합을 의미한다. 먼저 위치한 SELECT문을 기준으로, 다른 SELECT문과 공통된 레코드를 제외한 항목만 추출된다.

 

timetable

id name subject
1 철수 국어
2 철수 영어
3 철수 수학
4 영희 국어
5 영희 영어

 

 

select subject
from timetable
where name = '철수'

minus

select subject
from timetable
where name = '영희';

 

 

결과

subject
수학

 

주의사항

1. SELECT문들은 같은 개수의 컬럼을 조회해야만 한다.

 

  • 이를 지키지 않을 경우 에러가 발생한다. 그 이유는 2번에서 설명이 가능하다.

 

2. SELECT문들이 여러 개의 컬럼을 조회할 경우, 모든 컬럼에 대해 집합연산을 수행UNION연산에 여러 컬럼을 적용할 때는 주의해야 한다.

 

  • 집합연산자로 연결되는 SELECT 문들이 여러 개의 컬럼을 조회할 경우, 그 컬럼들을 묶어 하나의 세트로 인식하여 중복여부를 판단한다.

 

3. ORDER BY문은 맨 마지막에 사용할 수 있다.

 

  • ORDER BY문은 쿼리 수행 결과를 특정 컬럼을 기준으로 정렬하는 것이므로 맨 마지막이 아닌 중간에 수행해 버리면 ORDER BY의 수행이 무효화될 것이다.