오라클의 집합 연산자는 서로 다른 두 개의 결과를 연산을 통해 새로운 결과를 추출한다.
수학의 정석 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와 정 반대의 결과를 출력.
끝.
'IT | 개발 > Database' 카테고리의 다른 글
[Mybatis | 오류해결] 요소 콘텐츠는 올바른 형식의 문자 데이터 또는 마크업으로 구성되어야 합니다 (6) | 2020.01.22 |
---|---|
[ORACLE] 단일 행 함수 간단 정리(LOWER, UPPER, CONCAT, SUBSTR, LPAD, LTRIM, REPLACE 등) (6) | 2020.01.21 |
[오라클 | like] 특정 패턴 조회하기(한 글자, 여러 글자) (0) | 2020.01.19 |
[Oracle | 오류 해결] ORA-01795 에러 해결하기 (0) | 2020.01.18 |
[ORACLE | 함수] IF, ELSIF, ELSE 및 NULL 비교 방법 정리, NO_DATA_FOUND (2) | 2020.01.16 |