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

SELECT문을 실행하면 데이터가 조회됩니다. 만약 이렇게 조회한 여러개의 SELECT문을 가지고 데이터를 가공하고 싶다면 집합연산자를 사용하시면 됩니다. 집합연산자는 SELECT문 활용하여 조회한 데이터를 연산하는 연산자이며 우리가 어릴적 배웠던 그 집합과 동일합니다. 집합 연산자에는 UNION, UNION ALL, INTERSECT, MINUS가 있는데 이번 포스팅에서는 SELECT문들의 중복된 데이터만 추출해주는 INTERSECT에 대해 알아보도록 하겠습니다.

 

교집합 INTERSECT

교집합

두개의 SELECT문의 중복값을 출력하고 싶은 경우에는 INTERSECT를 사용하면 됩니다. INTERSECT를 사용하면 두개의 데이터 집합에서 공통된 항목만 추출해냅니다.

 

샘플데이터

위의 그림과 같은 데이터를 가진 두개의 테이블을 생성하였습니다. 만약 위 두개의 대학의 공통된 학과를 조회하고 싶다고 가정해보겠습니다. 이럴 경우 집합연산자인 INTERSECT을 사용하시면 됩니다. 집합연산자를 사용하기 위해서는 SELECT문의 컬럼명칭, 컬럼위치, 컬럼수가 동일해야합니다. 그렇지 않다면 ORA-01789: 질의 블록은 부정확한 수의 결과 열을 가지고 있습니다. 이라는 에러가 발생합니다. 만약 컬럼명이 같지 않다면 ALIOS를 활용하여 억지로라도 같게 만들어주셔야 합니다.

SELECT DEPARTMENT FROM UNIVERSITY1 --첫번째 SELECT문

INTERSECT

SELECT DEPARTMENT FROM  UNIVERSITY2 --두번째 SELECT문

INTERSECT

INTERSECT을 사용하여 두개의 SELECT문의 중복값을 출력하였습니다. INTERSECT을 사용하면 결과값은 자동으로 정렬 후 반환합니다.

 

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

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

 

댓글

Designed by JB FACTORY