[Oracle] SELECT문 중복된 값 제거 MINUS (차집합)

SELECT문을 실행하면 데이터가 조회됩니다. 만약 이렇게 조회한 여러개의 SELECT문을 가지고 데이터를 가공하고 싶다면 집합 연산자를 사용하시면 됩니다. 집합 연산자는 SELECT문 활용하여 조회한 데이터를 연산하는 연산자이며 우리가 어릴적 배웠던 그 집합과 동일합니다. 집합 연산자에는 UNION, UNION ALL, INTERSECT, MINUS가 있는데 이번 포스팅에서는 첫번째 SELECT문을 기준으로 두번째 SELECT문과의 공통된 데이터를 제거한 후 반환하는 MINUS에 대해 포스팅 해보도록 하겠습니다.

 

차집합 MINUS

차집합

첫번째 SELECT문에서 두번째 SELECT문을 빼고 싶다면 MINUS를 사용하면 됩니다. MINUS를 사용하면 첫번째 SELECT문을 기준으로 두번째 SELECT문과의 공통데이터를 제거 한 후 데이터를 반환합니다. 집합연산자를 사용하기 위해서는 SELECT문의 컬럼명칭, 컬럼위치, 컬럼수가 동일해야합니다. 그렇지 않다면 ORA-01789: 질의 블록은 부정확한 수의 결과 열을 가지고 있습니다. 이라는 에러가 발생합니다. 만약 컬럼명이 같지 않다면 ALIOS를 활용하여 억지로라도 같게 만들어주셔야 합니다.

 

샘플데이터

위와 같은 데이터를 가진 두개의 샘플 테이블을 생성하였습니다.

만약 서울대학교에만 있는 학과를 출력하고 싶다고 해보겠습니다. 이러한 상황에서는 집합연산자인 MINUS를 사용하시면 편하게 원하는 값을 얻어낼 수 있습니다.

SELECT DEPARTMENT FROM UNIVERSITY1 --첫번째 SELECT문

MINUS

SELECT DEPARTMENT FROM  UNIVERSITY2 --두번째 SELECT문

MINUS

위 쿼리는 첫번째 SELECT문(서울대)에는 있지만 두번째 SELECT문(부산대)에는 없는 학과를 조회한 것입니다. 반대로 부산대에만 있는 학과를 조회하고 싶다면 순서만 바꿔주면 됩니다. MINUS는 먼저 위치한 SLEECT문을 기준으로 합니다. MINUS도 다른 집합 연산자와 마찬가지로 결과값을 정렬한 후 반환합니다.

 

[Oracle] 여러개의 SELECT문 중복된 데이터만 추출하기 INTERSECT (교집합)

[Oracle] 여러개의 SELECT문 합치기 (UNION , UNILNALL) 합집합

 

댓글

Designed by JB FACTORY