본문으로 바로가기

[Oracle] Cartesian Product(카티션곱)이란?

category 2. Database/2_1 Oracle 2020. 7. 18. 11:57

   

 

이번 시간에는 CROSS JOIN에 대하여 알아보도록 하겠습니다.

크로스 조인은 흔히 Cartesian Product(카티션 곱)이라고 많이들 불립니다.

 

Cartesian Product [카티션 곱]

조인 조건절을 적지 않은 경우 해당 테이블에 대한 모든 데이터를 가져오는 현상이 바로 카티션 곱인데요.

즉, 조인 쿼리 중에 WHERE 절 혹은 JOIN 조건절이 잘못 기술되었거나 아예 없을 때 발생합니다.

 

아래 예제를 통하여 한 번 확인해 보도록 할까요?

- 출력결과를 화면에 전부 담아내지는 못했지만 총 56개의 결과값이 나왔습니다.

- 카티션 곱의 결과 얻어지는 컬럼의 수는 사원 테이블의 컬럼의 수(8)와 부서 테이블의 컬럼의 수(3)를 더한 것이므로 11이 됩니다.

- ROW(행) 수는 사원 한 명에 대해서 DEPT 테이블의 4개의 로우와 결합되기에 56개(14*4)가 됩니다.

- 카티션 곱의 결과를 보면 사원 테이블에 부서에 대한 상세정보가 결합되긴 했지만, 조인될 때 아무런 조건을 제시하지 않았기에 사원 한 명에 대해서 DEPT 테이블의 4개의 로우와 결합된 형태이기에 CROSS JOIN의 결과는 아무런 의미를 갖지 못합니다.

- 조인 결과가 의미를 가지려면 조인할 때 조건을 지정해야 합니다.

 

카티션 곱을 사용하는 이유는 크게 두 가지 입니다.

1. 데이터를 복제하여 원본 테이블을 반복해서 읽는 것을 피하기 위해

2. 실수로 조인 조건 컬럼 중 일부를 빠뜨리는 경우