Programming/SQL
[Oracle] 05. 잘못된 조인 문장 예(카티션 프로덕트, 테이블 별명 누락)
고막고막
2019. 4. 19. 15:15
분산된 테이블로부터 필요한 정보를 가져오는 조인을 수행할 때는 반드시 '조인 조건'이 있어야 한다. 조인조건이 없는 조인 문장은 교차 조인이 되어 모든 행이 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;