DB관련

COPY_T 테이블이란? 카티션 조인으로 데이터 복제해 결과 결합을 구하는 테스트용 테이블 활용법

saltdoll 2025. 5. 14. 07:41
반응형

다른 사람들과 함께하는 프로젝트를 하다 보면, 누군가 만들어 놓은 테이블 중에 "이게 뭐지?" 라고 궁금증을 유발하는 테이블이 있곤 합니다.

그중에 개인적으로 궁금했던 COPY_T 테이블의 용도를 확인해 보았습니다.

오래된 프로젝트에서 종종 발견 되었는데, 이 테이블의 용도를 알아보니.

하나의 데이터 세트(ROWS)로 여러 개 복제를 원할 때 사용하는 테이블이고, Cross Join(곱집합,Cartesian[카티션 조인])이라고 하더군요.

 

아주 간략하게 예제를 통해서 설명해 보겠습니다.

 

 

 

COPY_T 테이블이란?

기준 테이블을 원하는 배수만큼 복제하여 결과 집합을 구할 사용하거나 데이터 체크에 사용됩니다.

복제 테이블인 COPY_T테이블을 생성합니다.

CREATE TABLE COPY_T AS 
SELECT ROWNUM AS NUM 
       ,TO_CHAR(ROWNUM,'009') AS VAL 
FROM USER_TABLES 
WHERE ROWNUM < 101;

COPY_T 테이블 예제, 보통 NUM컬럼만있죠

 

COPY_T 테이블을 이용하여 총인원수 합계를 구하기

SELECT A.*
      ,B.NUM
FROM EMP2 A
     ,COPY_T B
WHERE A.EMP_TYPE = '정규직'
AND B.NUM < 3 ;

 

2배로 카티션 조인이 생성

 

COPY_T 테이블의 B.NUM < 3 조건에 의하여, 2개의 레코드만 추출되고,

여기서, EMP2 테이블과 카티션 조인이 되어 10 x 2= 20으로 결과가 나옵니다.

컬럼 NUM = 2 인, 컬럼값만 합산해서 구하면 합계를 만들 수 있습니다.

(생각보다 쿼리가 지저분 하긴 합니다)

SELECT DECODE(NUM, 1, DEPTNO, '합계') AS DEPTNO
       ,DECODE(NUM, 1, NAME, '합계') AS NAME
       ,COUNT(DECODE(NUM, 1, NAME, '합계')) AS TOTAL
FROM EMP2 A ,COPY_T B
WHERE A.EMP_TYPE ='정규직' AND B.NUM < 3
GROUP BY DECODE(NUM, 1, DEPTNO, '합계')
         ,DECODE(NUM, 1, NAME, '합계') 
ORDER BY DEPTNO;

 

결과는 다음과 같이 나오게 됩니다.

group by로 합계에 총인원수 표시

 

 

일반적으로 곱집합 (Cartesian product)이라고 표현되고, 테이블 X 테이블을 이용해서 방법이죠.

 

 

데카르트곱 (Descartes product, Cartesian product)

임의의 두 집합 A와 B에 대해 x∈A, y∈B인 모든 순서쌍 (x, y)로 이루어진 집합을 A와 B의 데카르트곱데카르트곱이라 하고, A×B로 표현됩니다.

                 

              A × B = { (x, y) | x∈A, y∈B }

 

 

각설하고, 카티션 곱의 sample를 한번 보도록 하죠.

카티션 곱의 테이블 예제

 

12(3×4)개의 새로운 투플들이 생겼습니다. ②, ⑤, ⑩ 투플들을 제외하곤 데이터의 연결관계가 없는 투플들이 카티션 곱의 결과로 생겼습니다.

 

Q : ②, ⑤, ⑩투플들만 선택하려면, 관계대수는?

 

곧 조인(join) 연산이 바로 위 관계대수식처럼 표현됩니다.

 

 

 

 

[출처] COPY_T 테이블이란?

[출처] 25. 관계대수(relational algebra)5 - 카티션 곱(cartesian product) | 작성자 행인

반응형