집합 연산

집합연산

이 문서에서는 집합연산의 개념과 이용방법에 대해서 다룬다.

집합연산이란

집합연산은 말 그대로 서로다른 집합 간의 연산을 말한다. 예를 들어 철수와 영희가 각각 좋아하는 색상이 다음과 같다고 가정해본다.

  • 철수 : 빨강, 파랑, 초록, 노랑

  • 영희 : 검정, 보라, 노랑, 빨강, 분홍

이를 집합으로 표현하면 다음 그림과 같다.

색상들은 다음과 같이 분류될 수 있다.

  • 철수와 영희가 모두 좋아하는 색 : 빨강, 노랑

  • 철수만 좋아하는 색 : 파랑, 초록

  • 영희만 좋아하는 색 : 검정, 분홍, 보라

  • 철수와 영희 둘 중 한명이라도 좋아하는 색 : 파랑, 초록, 빨강, 노랑, 검정, 분홍, 보라

집합연산 용어로 설명하면 다음과 같다.

  • 합집합 : 철수와 영희 둘 중 한명이라도 좋아하는 색, 철수∪영희

  • 교집합 : 철수와 영희 둘 다 좋아하는 색, 철수∩영희

  • 차집합 : 철수만 좋아하는 색(철수-영희), 영희만 좋아하는 색(영희-철수)

데이터 준비

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