다른 사람들과 함께하는 프로젝트를 하다 보면, 누군가 만들어 놓은 테이블 중에 "이게 뭐지?" 라고 궁금증을 유발하는 테이블이 있곤 합니다.
그중에 개인적으로 궁금했던 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) | 작성자 행인
'DB관련' 카테고리의 다른 글
[Oracle/MySQL] DECODE 함수 (0) | 2025.03.29 |
---|---|
SQL Database FTP백업 프로그램 - SQL Server, MySQL 지원 (0) | 2021.04.07 |
SymmetricDS 이기종 DB 연동, Mobile의 SQLite도 연동 가능 (0) | 2018.08.23 |
[펌] Static SQL을 위한 무기[1] - Cartesian Product(카테시안 곱) (0) | 2017.11.02 |
eXERD 개인 무료 ERD 프로그램 (5) | 2015.05.15 |
(로그인하지 않으셔도 가능)