JOIN의 종류(등가, 비등가, 자체)

신광진·2021년 3월 18일
0

INTRO


조인의 기본 개념을 잘 모르는 상태라면 이전 포스팅을 읽고오시는 것을 추천합니다.

등가 조인(EQUI JOIN)


등가조인(euqi join)은 테이블을 연결한 후 두 테이블의 특정 컬럼값이 일치하는 데이터를 기준으로 데이터를 출력하는 조인방식입니다.

등가조인은 다른말로는 내부조인(inner join)이나 단순조인(simple join)이라고 부르기도하며, 가장 많이 사용되는 조인방법입니다.
등가조인을 위해서는 조인을 하려는 테이블이 동일한 컬럼을 가지고 있어야 합니다.

[등가조인(equi join) 예시]

SELECT E.EMPNO, E.ENAME, D.DEPTNO, D.DNAME, D.LOC
  FROM EMP E, DEPT D
 WHERE E.DEPTNO = D.DEPTNO

위에 WHERE절에 기술된 조건을 등가조인의 JOIN 조건이라고 합니다.

직관적으로 알 수 있듯이 EMP테이블과 DEPT테이블의 DEPTNO가 일치하는 정보만을 출력하는 예제입니다.

위의 SELECT절을 보면 테이블 별칭을 사용하여 어떤 테이블의 컬럼을 조회하는 것인지 알 수 있게 했습니다.

이 예제에서는 DEPTNO를 제외한 컬럼들에는 테이블 별칭을 사용하지 않아도 문제없이 잘 동작합니다.

하지만 개인적인 생각으로 테이블별칭을 앞에 기술해주는것이 어떤 테이블의 정보인지 직관적으로 알기 편하다고 생각합니다.

비등가 조인(NON-EQUI JOIN)


비등가 조인(non-equi join)은 두 테이블의 공통컬럼이 없는 경우에 사용됩니다.

이번에는 사원테이블과 연봉등급 테이블을 조인할건데, 두 테이블은 공통 컬럼을 가지고 있지 않습니다.

그렇다면 두 테이블을 연결하기 위한 조인조건은 어떻게 기술해야 할까요?

우선 연봉등급 테이블은 최저연봉, 최고연봉, 연봉등급이라는 컬럼을 가지고 있습니다.

그리고 사원테이블에는 연봉이라는 컬럼이 있습니다.

그렇다면 사원의 연봉은 최저연봉과 최고연봉 사이값이 될것입니다.

이러한 정보를 이용하여 두 테이블을 조인 할 수 있습니다.

[비등가 조인(non-euqi join) 예시]

SELECT *
  FROM EMP E, SALGRADE S
 WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL

WHERE절을 수학식으로 표현하면 S.LOSAL <= E.SAL <= S.HISAL로 표현됩니다.

이런식으로 두 테이블이 공통 컬럼을 가지지 않더라도 조인을 할 수 있습니다.

하지만 비등가 조인은 많이 사용되지는 않기때문에 이러한 방법도 있다는 정도만 알고있으면 될 것 같습니다.

자체 조인(SELF JOIN)


자체조인(self join)은 말 그대로 자신의 테이블을 조인하는 것입니다.

예를들어 사원테이블에는 MGR이라는 상사의 사원번호가 저장되어 있는 컬럼이 있습니다.

우리가 사원의 이름, 상사의 사원번호, 상사의 이름을 함께 출력하고 싶은 경우를 생각해보면 상사의 이름을 동시에 출력할 방법이 없습니다.

즉 상사의 이름을 함께 출력하고싶다면 사원테이블과 동일한 정보를 가진 테이블에서 정보를 가져와야 한다는 것입니다.

아주 간단하게 사원테이블을 복사하고 원본테이블과 복사테이블을 조인하여 구현할 수 있습니다.

하지만 이러한 방법은 매우 비효율적인 방법이죠.

따라서 이러한 경우 자체조인을 사용할 수 있습니다.

[자체 조인(self join) 예시]

SELECT E.EMPNO, E.ENAME, E.MGR,
       E1.EMPNO AS MGR_EMPNO,
       E1.ENAME AS MGR_ENAME
  FROM EMP E, EMP E1
 WHERE E.MGR = E1.EMPNO

FROM절에 동일한 테이블을 별칭만 다르게 하여 사용하였습니다.

WHERE절의 조건을 보면 상사의번호가 사원번호와 같은 데이터만 출력하도록 되어있습니다.

이런식으로 동일한 테이블을 별칭을 다르게 사용하여 자체조인을 할 수 있습니다.

profile
이거 왜안되냐

0개의 댓글