COPY_T 테이블이란? 카티션 조인으로 데이터 복제해 결과 결합을 구하는 테스트용 테이블 활용법
다른 사람들과 함께하는 프로젝트를 하다 보면, 누군가 만들어 놓은 테이블 중에 "이게 뭐지?" 라고 궁금증을 유발하는 테이블이 있곤 합니다.
그중에 개인적으로 궁금했던 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 테이블을 이용하여 총인원수 합계를 구하기
SELECT A.*
,B.NUM
FROM EMP2 A
,COPY_T B
WHERE A.EMP_TYPE = '정규직'
AND B.NUM < 3 ;
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;
결과는 다음과 같이 나오게 됩니다.
일반적으로 곱집합 (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) | 작성자 행인