오라클 Union연산 원리

박준우·2023년 10월 12일

짤팁

목록 보기
4/5

1. 오라클 Union 연산의 원리

가끔 유니온 연산(TABLE_A UNION TABLE_B)시 교집합 부분을 제거하고 추가한다는 의미를, TABLE_B를 추가할 때 추가되는 부분(TABLE_B)내에서 교집합 부분을 제외한 부분만 추가한다는 의미로 알고 있는 사람이 있어서 포스팅을 작성해본다.

Union의 정확한 의미는 아래 그림과 같이, TABLE_A 에서 교집합 부분을 제거하고 테이블_B를 추가하는 것이다.

2. 오라클 union연산 작동 방식

테이블 A

insert into TAB1 values (10, 'A1');
insert into TAB1 values (20, 'A2');

테이블 B

insert into TAB2 values (10, 'A1');
insert into TAB2 values (20, 'A2');
insert into TAB2 values (30, 'A3');
insert into TAB2 values (40, 'A4');

위와 같은 테이블에서 아래와 같이 쿼리를 날렸다.

select COL1, COL2 ,count(*) AS CNT
from (select COL1, COL2 from TAB1
      union all 
      select COL1, COL2 사원명 from TAB2
      union 
      select COL1, COL2 from TAB1)

그리고 아래와 같은 결과를 출력하였다.

왜 위와같은 결과를 추출하였을까? TABLE_B를 추가할 때 추가되는 부분(TABLE_B)내에서 교집합 부분을 제외한 부분만 추가한다는 의미로 알고 있는 사람은 지금부터 지식을 수정해보자.

select COL1, COL2 ,count(*) AS CNT
from (select COL1, COL2 from TAB1
      union all 
      select COL1, COL2 사원명 from TAB2)

일단 위 쿼리를 실행하면 다음과 같은 결과를 가져온다.

하지만 아래와 같이 union TABL1을 추가 하게되면 단순히 중복된 부분인 TABL1 추가가 실패하는게 아니라, 앞테이블(TABL1 union all Table2)에서 중복된 부분을 삭제하고, 그 후에 뒷 테이블(TAB1)을 추가하는 연산을 하게된다.

select COL1, COL2
from (select COL1, COL2 from TAB1
      union all 
      select COL1, COL2 사원명 from TAB2
      union
      select COL1, COL2 from TAB1)

그러므로 위와같이 결과가 나오게된다.

profile
DB가 좋아요

0개의 댓글