• 카테고리

    질문 & 답변
  • 세부 분야

    데이터베이스

  • 해결 여부

    미해결

Non equi join 문의

22.09.26 14:03 작성 조회수 147

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

감사합니다.

yoonji님의 프로필

yoonji

질문자

2022.09.26

다른 테이블을 조인할 때 키 값으로 기본 키(pk)만 가능한 줄 알았는데

어떤 컬럼도 상관 없었군요!! 이너 조인을 할때 키 값을 기본 키로만 하던데... 정확히 이 둘의 차이점은 무엇인가요?

이너 조인을 포함하여 조인 키값은 어떤 컬럼도 가능합니다. 이너 조인시 PK를 많이 사용하는 이유는 대부분의 테이블이 PK와 FK로 연결되어 있기 때문입니다. 하지만 PK-FK관계가 없어도 두 테이블간 연결할 수 있는 컬럼 조건만 있다면 얼마든지 조인 키 컬럼이 될 수 있습니다.

yoonji님의 프로필

yoonji

질문자

2022.09.26

정성스러운 답변 감사드립니다!! 강의 열심히 듣고 있습니다~