본문 바로가기
Programming/SQL

[Oracle] 05. 잘못된 조인 문장 예(카티션 프로덕트, 테이블 별명 누락)

by 고막고막 2019. 4. 19.

분산된 테이블로부터 필요한 정보를 가져오는 조인을 수행할 때는 반드시 '조인 조건'이 있어야 한다. 조인조건이 없는 조인 문장은 교차 조인이 되어 모든 행이 1:1로 대응(카티션 프로덕트: Cartisian Product)되는 행렬이 검색된다. 이는 잘못된 결과값이다. 

카티션 프로덕트(출처: 한국데이터산업진흥원)

// 조인 조건이 없는 교차 조인을 수행한 예시

SELECT loc 근무지, eno 사번, ename 사원명, d.dno 부서번호, dname 부서명
FROM emp e, dept d

 

FROM절을 쓸때는 테이블 명 뒤에 별명(약자)을 붙혀서 보다 간결한 쿼리를 짤 수 있는데, FROM emp e, dept d; 라고 하면 '지금부터 emp를 e라고 부를거야~'라고 한다는 의미이다. 따라서 SELECT, WHERE절에서도 별명으로 해당 테이블을 호출할 수 있다. 그런데 여기서, 원래의 테이블 명으로 호출할 경우 'invalid identifier error'가 발생한다. SQL문을 실행할 때, 메모리 상에서는 FROM절이 가장 먼저 실행되기 때문에 그 이후에 실행되는 절에서도 FROM절과 동일한 이름으로 호출해야 하기 때문이다.

// 잘못된 별명 사용 예시

SELECT loc 근무지, eno 사번, ename 사원명, dept.dno 부서번호, emp.dno 부서번호, dname 부서명
FROM emp e, dept d
WHERE loc='광주' AND d.dno = e.dno;