SQL 5-12. 카티시안 곱 (Cartesian Product)
관련링크
본문
조인의 결과가 너무 많이 나올경우 카티시안 곱이 형성 된다.
즉 잘못되었다고 판단 하면 된다.
한 테이블당 100 건 이라면
100 X 100 이 출력된다.
․ 카티시안 곱은 다음 경우에 생성됩니다.
- 조인조건을 생략한 경우
- 조인조건이 부적합한 경우
- 첫 번째 테이블의 모든 행이 두 번째 테이블의 모든 행에 조인된 경우
․ 카티시안 곱이 생성되지 않도록 하려면 WHERE절에 항상 유효한 조인 조건을 포함시켜야 한다.
카티시안 곱은 너무 많은 행을 생성하므로 결과가 별로 유용하게 사용되지 않다.
특별히 모든 테이블에 있는 모든 행을 조합해야 하는 경우가 아니라면 항상 WHERE절에 적합한 조인 조건을 포함시키도 록 한다.
카티시안 곱은 적정 양의 데이터를 시뮬레이트하기 위해 많은 수의 행을 생성해야 하는 경우와 같은 일부 테스트에서 유용하다.
예제)
오라클 디비 예제 :
SELECT last_name, department_name dept_name
FROM employees, departments;
☞설명)
예제는 EMPLOYEES테이블과 DEPARTMENTS테이블에서 사원의 이름과 부서 이름을 표시한다.
WHERE절을 지정하지 않았으므로 EMPLOYEES테이블의 모든 행(20개 행)이 DEPARTMENTS테이블의 모든 행(8개
행)과 조인되어 결과적으로 160개 행(row)이 생성된다.
MSSQL 디비 예제 :
SELECT SUBSTRING(RTRIM(authors.au_fname)+' '
+RTRIM(authors.au_lname)+ ' ',1,25) AS Name,
authors.au_id, titleauthor.title_id
FROM titleauthor , authors
① 교차 조인 작성
․ CROSS JOIN절은 두 테이블 상호간의 조합을 생성합니다.
․ 이것은 두 테이블 사이의 카티시안 곱(Cartesian Product)과 동일합니다.
오라클 디비 예제 :
SELECT last_name, department_name
FROM employees
CROSS JOIN departments;
☞설명)
예제는 다음과 동일한 결과를 생성한다.
SELECT last_name, department_name
FROM employees, departments;