본문 바로가기
Database

집합 연산자

by oncerun 2021. 5. 23.
반응형

 

집합 연산자는 두 개 이상 테이블에서 조인을 사용하지 않고 연관된 데이터를 조회하는 방법 중에 집합 연산자(Set Operator)를 사용하는 방법이다.

 

 - 집합 연산자는 여러 개의 질의의 결과를 연결하여 하나로 결합하는 방식을 사용한다.

 

제약 조건

 

 - SELECT 절의 칼럼수가 동일하고 SELECT절의 동일 위치에 존재하는 칼람의 데이터 타입이 상호 호환 가능해야 한다.

상호 호환 가능해야 한다는 건 암시적으로 타입이 변환이 가능함을 뜻한다. 꼭 동일할 필요는 없다.

 

 - ORDER BY 절은 맨 마지막 문장에서만 사용할 수 있다.

 

 - 만약 SELECT문의 리스트가 늘어나면 집합 연산 대상도 합쳐져서 UNION에서의 중복제거가 의미가 없어질 수 있다.

 

 - BLOB, CLOB, BFILE 타입의 칼럼의 대해서는 집합 연산자를 사용할 수 없다.

 

 - UNION, INTERSECT, MINUS 연산자는 LONG형 칼럼에는 사용할 수 없다.

문자 데이터 타입

데이터타입   
 CHAR(n)  고정길이 문자 / 최대 2000byte / 디폴트 값은 1byte 
 VARCHAR2(n)  가변길이 문자 / 최대 4000BYTE / 디폴트 값은 1byte 
 NCHAR(n)  고정길이 유니코드 문자(다국어 입력가능) / 최대 2000byte / 디폴트 값은 1byte 
 NVARCHAR(n)  가변길이 유니코드 문자(다국어 입력가능) / 최대 2000byte / 디폴트 값은 1byte 
 LONG   최대 2GB 크기의 가변길이 문자형 
 CLOB  대용량 텍스트 데이터 타입(최대 4Gbyte)
 NCLOB  대용량 텍스트 유니코드 데이터 타입(최대 4Gbyte)

 

 

집합 연산자는 다음과 같은 상황에 사용하기 적합하다.

 

- 제약조건을 만족시키며 서로 다른 테이블에서 유사한 형태의 결과를 반환하는 것을 하나의 결과로 합치고자 할 때

- 동일 테이블에서 서로 다른 질의를 수행하여 결과를 합치고자 할 때

- 튜닝 관점에서는 실행 계획을 분리하고자 하는 목적

 

 

종류

 

UNION : 여러 개의 SQL 문의 결과를 합집합으로 결과를 만들고 결과에서 모든 중복된 행을 하나의 행으로 만든다.

 

SELECT 'FIRST' 구분행, PLAYER_NAME FROM PLAYER 
UNION
SELECT 'SECOND' 구분행 , PLAYER_NAME FROM PLAYER ;

UNION ALL : 여러 개의 SQL 문의 결과를 합집합으로 결과를 만들고 중복된 행도 그대로 결과에 반영된다. 일반적으로 두 개의 결과가 상호 배타적일 때 많이 사용한다.

 

SELECT 절
UNION ALL
SELECT 절

 

INTERSECT : 여러 개의 SQL 문의 결과에 대한 교집합이다. 중복된 행을 하나로 만든다. 이 INTERSECT는 논리 연산자 AND, EXISTS, IN(서브 쿼리)로 대체가 가능하다.

SELECT PLAYER_NAME FROM PLAYER 
INTERSECT
SELECT PLAYER_NAME FROM PLAYER ;

 

EXCEPT / MINUS(ORACLE) : 앞의 SQL 문의 결과에서 뒤의 SQL 문의 결과의 차집합을 구한다. 중복된 행은 하나로 만든다. 이 또한 NOT EXISTS , NOT IN (서브 쿼리)로 대체가 가능하다.

 

 

* UNION ALL을 제외한 다른 집합 연산 잔에서는 SQL문 결과 집합에서 먼저 중복된 건을 배제하는 작업을 수행한 후에 집합 연산을 적용한다.

반응형

'Database' 카테고리의 다른 글

데이터베이스 특수문자 패스워드 및 인덱스  (0) 2021.10.28
그룹 함수 (1)  (0) 2021.05.23
파티션 테이블  (0) 2021.05.22
파일 구조(file organization)  (0) 2021.05.02
조인 수행원리  (0) 2021.05.01

댓글