4.2 집합연산자
집합연산자 : 두 테이블에 대한 집합 연산(합집합, 교집합 등)을 수행하는 연산자. 스키마 구성이 동일한(같은 수의 칼럼을 가지고, 대응되는 칼럼간의 데이터 타입이 같은) 테이블에 대해서 기준키 없이 모든 레코드들에 대하여 집합 연산을 수행한다. 이때 반환되는 칼럼의 이름은 첫번째 테이블을 따른다.
이후의 집합연산자 예제에서는 아래 테이블을 사용한다.
NAME | TEL | CLASS |
---|---|---|
공은호 | 010-2334-4233 | 1 |
홍길동 | 010-3765-2345 | 2 |
남기은 | 010-1221-7766 | 2 |
남윤지 | 010-4533-0765 | 1 |
백준혁 | 010-3887-6532 | 3 |
NAME | TEL | CLASS |
---|---|---|
남기은 | 010-1221-7766 | 2 |
안현준 | 010-3478-9233 | 2 |
박채민 | 010-8787-0087 | 1 |
백준혁 | 010-3887-6532 | 3 |
권소은 | 010-3890-2675 | 3 |
UNION ALL / UNION : 합집합 연산을 수행한다. 중복 레코드를 중복된 만큼 포함시키는 것이 UNION ALL, 하나만 포함시키는 것이 UNION이다. UNION을 사용하면 같은 테이블 내의 중복까지 제거되므로 주의해야 한다.
SELECT NAME, TEL, CLASS FROM CLUB1
UNION ALL SELECT NAME, TEL, CLASS FROM CLUB2;
=> 두 테이블을 병합한다. 중복을 포함하여 전체 10건이 출력된다.
NAME | TEL | CLASS |
---|---|---|
공은호 | 010-2334-4233 | 1 |
홍길동 | 010-3765-2345 | 2 |
남기은 | 010-1221-7766 | 2 |
남윤지 | 010-4533-0765 | 1 |
백준혁 | 010-3887-6532 | 3 |
남기은 | 010-1221-7766 | 2 |
안현준 | 010-3478-9233 | 2 |
박채민 | 010-8787-0087 | 1 |
백준혁 | 010-3887-6532 | 3 |
권소은 | 010-3890-2675 | 3 |
SELECT NAME, TEL, CLASS FROM CLUB1
UNION SELECT NAME, TEL, CLASS FROM CLUB2;
=> 두 테이블을 병합한다. 중복을 제거하여 8건이 출력된다.
NAME | TEL | CLASS |
---|---|---|
공은호 | 010-2334-4233 | 1 |
홍길동 | 010-3765-2345 | 2 |
남기은 | 010-1221-7766 | 2 |
남윤지 | 010-4533-0765 | 1 |
백준혁 | 010-3887-6532 | 3 |
안현준 | 010-3478-9233 | 2 |
박채민 | 010-8787-0087 | 1 |
권소은 | 010-3890-2675 | 3 |
INTERSECT : 교집합 연산을 수행한다.
SELECT NAME, TEL, CLASS FROM CLUB1
INTERSECT SELECT NAME, TEL, CLASS FROM CLUB2;
=> 중복 데이터만 추출하므로 2건이 출력된다.
NAME | TEL | CLASS |
---|---|---|
남기은 | 010-1221-7766 | 2 |
백준혁 | 010-3887-6532 | 3 |
MINUS / EXCEPT : 차집합 연산을 수행한다. 왼쪽 테이블에만 존재하는 데이터들을 반환한다.
SELECT NAME, TEL, CLASS FROM CLUB1
MINUS SELECT NAME, TEL, CLASS FROM CLUB2;
=> 왼쪽 테이블에서 중복 데이터를 제외하여 3건이 출력된다.
NAME | TEL | CLASS |
---|---|---|
공은호 | 010-2334-4233 | 1 |
홍길동 | 010-3765-2345 | 2 |
남윤지 | 010-4533-0765 | 1 |