이번 시간에는 CROSS JOIN에 대하여 알아보도록 하겠습니다.
크로스 조인은 흔히 Cartesian Product(카티션 곱)이라고 많이들 불립니다.
Cartesian Product [카티션 곱]
조인 조건절을 적지 않은 경우 해당 테이블에 대한 모든 데이터를 가져오는 현상이 바로 카티션 곱인데요.
즉, 조인 쿼리 중에 WHERE 절 혹은 JOIN 조건절이 잘못 기술되었거나 아예 없을 때 발생합니다.
아래 예제를 통하여 한 번 확인해 보도록 할까요?
- 출력결과를 화면에 전부 담아내지는 못했지만 총 56개의 결과값이 나왔습니다.
- 카티션 곱의 결과 얻어지는 컬럼의 수는 사원 테이블의 컬럼의 수(8)와 부서 테이블의 컬럼의 수(3)를 더한 것이므로 11이 됩니다.
- ROW(행) 수는 사원 한 명에 대해서 DEPT 테이블의 4개의 로우와 결합되기에 56개(14*4)가 됩니다.
- 카티션 곱의 결과를 보면 사원 테이블에 부서에 대한 상세정보가 결합되긴 했지만, 조인될 때 아무런 조건을 제시하지 않았기에 사원 한 명에 대해서 DEPT 테이블의 4개의 로우와 결합된 형태이기에 CROSS JOIN의 결과는 아무런 의미를 갖지 못합니다.
- 조인 결과가 의미를 가지려면 조인할 때 조건을 지정해야 합니다.
카티션 곱을 사용하는 이유는 크게 두 가지 입니다.
1. 데이터를 복제하여 원본 테이블을 반복해서 읽는 것을 피하기 위해
2. 실수로 조인 조건 컬럼 중 일부를 빠뜨리는 경우
'2. Database > 2_1 Oracle' 카테고리의 다른 글
[Oracle] COALESCE() - NULL값을 치환하여 반환하는 함수 (0) | 2020.08.05 |
---|---|
[Oracle] OUTER JOIN 정리 - LEFT, RIGHT, FULL (0) | 2020.07.20 |
[Oracle] MAX(), MIN() - 최댓값과 최솟값을 구하는 방법 (0) | 2020.07.16 |
[Oracle] COUNT() - 행의 개수를 구하는 방법 (0) | 2020.07.15 |
[Oracle] CASE WHEN THEN 문 (0) | 2020.07.14 |