오라클의 집합 연산자는 서로 다른 두 개의 결과를 연산을 통해 새로운 결과를 추출한다.

수학의 정석 1장에서 배운 집합의 셈(합집합, 교집합, 차집합)과 비슷한 개념이다.

 

1. 집합 연산자의 종류

집합 연산자는 4가지 종류가 있다.

-UNION: 두 집합을 더해서 결과를 출력. 중복 값 제거하고 정렬함

-UNION ALL: 두 집합을 더해서 결과를 출력. 중복 값 제거 안하고 정렬 안함

-INTERSECT: 두 집합의 교집합 결과를 출력. 정렬함.

-MINUS: 두 집합의 차집합 결과를 출력. 쿼리의 순서 중요함

 

2. 연산자 사용 조건

(1)두 집합의 SELECT 절에 오는 칼럼의 개수가 동일해야 한다.

(2)두 집합의 SELECT 절에 오는 칼럼의 데이터형이 동일해야 한다.

(3) 두 집합의 칼럼명은 달라도 상관없다.

 

3. 부가 설명

(1)UNION / UNION ALL

-UNION, UNION ALL 모두 두 집합을 더해서 결과를 출력.

-UNION은 두 결과에서 중복된 값을 제거하고 출력

-UNION ALL은 중복되는 값까지 전부 다 출력.

 

 

4. 연산자 별 예시

 

(1)UNION ALL

질의) 학력정보 테이블에서 대학명이 대구대인 사람의 정보와 창원대인 사람의 결과를 UNION ALL

 

SELECT 대학교명, 전공명 FROM 학력정보

WHERE 대학교명 = '대구대'

UNION ALL

SELECT 대학교명, 전공명 FROM 학력정보

WHERE 대학교명 = '창원대'

=> 중복된 항목 제거 X  및 정렬 X

 

(2)UNION

질의) 학력정보 테이블에서 대학명이 대구대인 사람의 정보와 창원대인 사람의 결과를 UNION ALL

 

SELECT 대학교명, 전공명 FROM 학력정보

WHERE 대학교명 = '대구대'

UNION

SELECT 대학교명, 전공명 FROM 학력정보

WHERE 대학교명 = '창원대'

=> 중복된 항목 제거 O 및 전공 명 오름차순 정렬 O

 

(3)INTERSECT

질의) 학력정보 테이블에서 대학명이 대구대인 모든 라인과,

       대학명이 대구대이면서 전공명이 행정학인 라인을 INTERSECT

 

SELECT 대학교명, 전공명 FROM 학력정보

WHERE 대학교명 = '대구대'

INTERSECT

SELECT 대학교명, 전공명 FROM 학력정보

WHERE 대학교명 = '창원대'

AND 전공명 = '행정학'

 

=>두 개의 쿼리의 교집합인 ROW만 출력됨.

근데 사실 INTERSECT는 굳이 쓸 필요가 있나 싶음.

단순히 WHERE 조건절로 해결 가능해 보임.

 

(4)MINUS

질의) 학력정보 테이블에서 대학명이 대구대인 모든 라인과,

       대학명이 대구대이면서 전공명이 행정학인 라인을 MINUS

 

=> INTERSECT와 정 반대의 결과를 출력.

 

끝.

+ Recent posts