Oracle #9 - 집합 연산자

ennakoida·2023년 6월 25일
0

Oracle

목록 보기
13/13

📍 집합 연산자

집합 연산자는 여러 개의 SELECT 결과물을 하나의 쿼리로 만드는 연산자로, INTERSECT, UNION, UNION ALL, MINUS … 가 있다.


INTERSECT : 교집합 (∩)

SELECT EMP_NAME, EMP_ID FROM EMPLOYEE WHERE DEPT_CODE = 'D5' -- A
INTERSECT -- 교집합 A∩B
SELECT EMP_NAME, EMP_ID FROM EMPLOYEE WHERE SALARY >= 2400000; -- B

INTERSECT는 여러 개의 SELECT 결과에서 공통된 부분만 결과로 추출한다. 즉, 수행 결과에 대한 교집합이라고 볼 수 있다.


UNION : 합집합 (∪)

SELECT EMP_NAME, EMP_ID FROM EMPLOYEE WHERE DEPT_CODE = 'D5' -- A
UNION -- 합집합 A∪B
SELECT EMP_NAME, EMP_ID FROM EMPLOYEE WHERE SALARY >= 2400000; -- B

UNION은 여러 개의 쿼리 결과를 하나로 합치는 연산자로, 중복된 영역은 제외하여 하나로 합치는 합집합이다.


UNION ALL : 중복 허용 합집합

SELECT EMP_NAME, EMP_ID FROM EMPLOYEE WHERE DEPT_CODE = 'D5' -- A
UNION ALL -- 합집합 (중복허용)
SELECT EMP_NAME, EMP_ID FROM EMPLOYEE WHERE SALARY >= 2400000; -- B

그에 비해 UNION ALL은 UNION과 같은 여러 쿼리 결과물에 대한 합집합을 의미하지만, 중복된 영역을 모두 포함시킨다는 차이점이 존재한다.

UNION ALL의 경우, 합칠 A와 B의 칼럼의 갯수가 같아야하고, 칼럼의 자료형 또한 같아야한다.
(다를 경우 : ORA-01790: expression must have same datatype as corresponding expression)


MINUS : 차집합 (-)

SELECT EMP_NAME, EMP_ID FROM EMPLOYEE WHERE DEPT_CODE = 'D5' -- A
MINUS -- 차집합 A-B
SELECT EMP_NAME, EMP_ID FROM EMPLOYEE WHERE SALARY >= 2400000; -- B

MINUS는 선행 SELECT 결과에서 다음 SELECT 결과와 겹치는 부분을 제외한 나머지 부분만 추출한다. 즉, 두 쿼리 결과물의 차집합이라고 볼 수 있다.

0개의 댓글