집합 연산
집합연산
이 문서에서는 집합연산의 개념과 이용방법에 대해서 다룬다.
집합연산이란
집합연산은 말 그대로 서로다른 집합 간의 연산을 말한다. 예를 들어 철수와 영희가 각각 좋아하는 색상이 다음과 같다고 가정해본다.
철수 : 빨강, 파랑, 초록, 노랑
영희 : 검정, 보라, 노랑, 빨강, 분홍
이를 집합으로 표현하면 다음 그림과 같다.

색상들은 다음과 같이 분류될 수 있다.
철수와 영희가 모두 좋아하는 색 : 빨강, 노랑
철수만 좋아하는 색 : 파랑, 초록
영희만 좋아하는 색 : 검정, 분홍, 보라
철수와 영희 둘 중 한명이라도 좋아하는 색 : 파랑, 초록, 빨강, 노랑, 검정, 분홍, 보라
집합연산 용어로 설명하면 다음과 같다.
합집합 : 철수와 영희 둘 중 한명이라도 좋아하는 색, 철수∪영희
교집합 : 철수와 영희 둘 다 좋아하는 색, 철수∩영희
차집합 : 철수만 좋아하는 색(철수-영희), 영희만 좋아하는 색(영희-철수)
데이터 준비
table favorite
name
color
철수
빨강
철수
파랑
철수
초록
철수
노랑
영희
검정
영희
보라
영희
노랑
영희
빨강
영희
분홍
create table favorite(
name varchar2(6) not null,
color varchar2(6) not null
);
insert into favorite values('철수', '빨강');
insert into favorite values('철수', '파랑');
insert into favorite values('철수', '초록');
insert into favorite values('철수', '노랑');
insert into favorite values('영희', '검정');
insert into favorite values('영희', '보라');
insert into favorite values('영희', '노랑');
insert into favorite values('영희', '빨강');
insert into favorite values('영희', '분홍');
commit;
합집합(UNION)

합집합은 다음 두 가지로 구분한다
UNION ALL : 중복을 허용하는 합집합
UNION : 중복을 제거한 합집합
select color from favorite where name = '철수'
union all
select color from favorite where name = '영희';
color
빨강
파랑
초록
노랑
검정
보라
노랑
빨강
분홍
union을 사용하면 중복을 제거한 합집합을 확인할 수 있다.
select color from favorite where name = '철수'
union
select color from favorite where name = '영희';
color
검정
노랑
보라
분홍
빨강
초록
파랑
select * from favorite where name = '철수'
union
select * from favorite where name = '영희';
union은 union distinct와 같은 의미라는 것을 결과로 확인할 수 있다.
교집합

교집합은 intersect
키워드를 사용한다.
select * from favorite where name = '철수'
intersect
select * from favorite where name = '영희';
color
노랑
빨강
차집합
차집합은 minus
키워드를 사용한다.
철수 - 영희

select * from favorite where name = '철수'
minus
select * from favorite where name = '영희';
color
초록
파랑
영희 - 철수

select * from favorite where name = '영희'
minus
select * from favorite where name = '철수';
color
검정
보라
분홍
Last updated