기록

database - 집합 연산(UNION, INTERSECT, EXCEPT) 본문

[Study]/Database

database - 집합 연산(UNION, INTERSECT, EXCEPT)

Dannnnnn 2019. 8. 2. 18:28
반응형

집합 연산이란?

데이터베이이스에서의 집합은 레코드의 집합을 의미한다.

집합 연산은 레코드끼리 더하거나 빼는, 이른바 레코드 사칙연산이다.

 

이번 포스팅에서는 테이블 덧셈과 뺄셈을, 다음 포스팅에서는 테이블 결합을 배워보자.

 

테이블 덧셈 ㅡ UNION (합집합)

UNION은 레코드 덧셈을 수행하는 집합연산자이다.

SELECT goods_id, goods_name
	FROM Goods
UNION
SELECT goods_id, goods_name
	FROM Goods2
ORDER BY goods_id;

UNION 뿐만 아니라 모든 집합 연산자는 중복 행을 제외한다.

 

집합 연산의 주의사항

1) 연산 대상이 되는 레코드의 열 수가 같아야 한다. (에러 발생)

2) 덧셈 대상이 되는 레코드의 열이 같은 데이터형일 것 (에러 발생)

    -> 어쩔 수 없이 사용해야한다면 이전에 배운 형 변환 함수 CAST 사용

3) ORDER BY는 마지막에 하나만 가능하다

 

중복 행을 포함하는 집합 연산 ㅡ ALL 옵션

SELECT goods_id, goods_name
	FROM Goods
UNION ALL
SELECT goods_id, goods_name
	FROM Goods2
ORDER BY goods_id;

 

테이블 간 공통 부분 선택 ㅡ INTERSECT (교집합)

 

MySQL에서는 아직 INTERSECT를 지원하지 않는다.

구문은 UNION과 완전 동일하며 중복 행을 포함하고 싶을 경우에는 INTERSECT ALL로 기술하는 것도 같다.

 

레코드 뺄셈 ㅡ EXCEPT (차집합)

 

EXCEPT는 뺄셈을 하는 집합연산자이다. 구문은 역시 UNION과 동일하다.

Oracle은 EXCEPT 대신 MINUS를 사용한다. 또한, MySQL은 아직 EXCEPT를 지원하지 않는다.

 

SELECT goods_id, goods_name
	FROM Goods
EXCEPT
SELECT goods_id, goods_name
	FROM Goods2;
ORDER BY goods_id;

 

반응형