작성
·
209
0
강사님, 안녕하세요!
강의듣다가 헷갈리는 부분이 있어 질문드립니다.
-- 직원정보와 급여등급 정보를 추출.
select a.*, b.grade
from emp a join salgrade b on a.sal between b.losal and b.hisal
여기에서 키 값으로 연결하지 않고 테이블을 연결하는데
-- 직원 급여의 이력정보를 나타내며, 해당 급여를 가졌던 시점에서의 부서번호도 함께 가져올것.
select a.*,b.detpno
from emp_salary_hist a
join emp_dept_hist b on a.empno= b.empno
and a.fromdate between b.fromdate and a.todate
여기에서는 키 값으로 연결한 조인으로 테이블을 연결하는데
정확히 이 둘의 차이점이 궁금합니다!
위에는 non equi조인이라면
아래에는 equi 조인이랑 none equi 조인을 동시에 하는 건가요?
답변 1
0
안녕하십니까,
먼저 조인을 수행하는 조인 key값은 해당 테이블의 어떤 컬럼이든 상관없습니다.
적어주신 두개의 SQL은 모두 조인 key값으로 조인 대상 테이블의 컬럼들을 사용하여 연결하고 있습니다. 다만 이들의 연결을 조인 key값의 equi조건이 아니라 non equi 조건으로 수행합니다.
먼저 아래 SQL은 emp와 salgrade 테이블을 조인으로 연결하는데 조인의 key를 emp의 sal 컬럼과 salgrade의 losal과 hisal 컬럼을 이용하되 조인 조건이 sal 컬럼값이 losal과 hisal 컬럼 값 사이에 있는 데이터만 조인으로 연결하도록 하는 non-equi 조건으로 되어 있습니다.
select a.*, b.grade
from emp a join salgrade b on a.sal between b.losal and b.hisal
두번째 SQL의 경우도 유사합니다. 다만 첫번째 조인 key컬럼은 emp_salary_hist의 empno와 emp_dept_hist의 empno를 equi-join으로 연결합니다. 하지만 두번째 조인 key 컬럼은 emp_salary_hist의 from_date컬럼값이 emp_dept_hist의 fromdate와 todate 사이의 값만 조인으로 연결하고 있기에 전체적으로는 non-equi 조인이 됩니다.
select a.*,b.detpno
from emp_salary_hist a
join emp_dept_hist b on a.empno= b.empno
and a.fromdate between b.fromdate and a.todate
감사합니다.
다른 테이블을 조인할 때 키 값으로 기본 키(pk)만 가능한 줄 알았는데
어떤 컬럼도 상관 없었군요!! 이너 조인을 할때 키 값을 기본 키로만 하던데... 정확히 이 둘의 차이점은 무엇인가요?