ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Oracle] 셀프 조인(Self Join)
    RDS/Oracle 2019. 3. 16. 17:48
    반응형

    셀프 조인(Self Join)

    셀프 조인이란 동일 테이블 사이의 조인을 말합니다. 따라서 FROM 절에 동일 테이블이 두 번 이상 나타납니다. 

    도일 테이블 사이의 조인을 수행하면 테이블과 컬럼 이름이 모두 동일하기 때문에 식별을 위해 반드시 테이블 별칭(Alias)을 사용해야 합니다. 그리고 컬럼에도 모두 테이블 별칭을 사용해서 어느 테이블의 컬럼인지 식별해줘야 합니다.

    1
    2
    3
    4
    SELECT ALIAS명1.컬럼명
          , ALIAS명2.컬럼명
      FROM 테이블1 ALIAS명1, 테이블2 ALIAS명2
     WEHRE ALIAS명1.컬럼명2 = ALIAS명2.컬럼명1;
    cs

     

    사원과 사원의 직속 관리지는 동일한 행에서 데이터를 구할 수 있으나 차상위 관리자는 바로 구할 수 없습니다. 차상위 관리자를 구하기 위해서는 자신의 직속 관리자를 기준으로 사원 테이블과 한번 더 조인(셀프 조인)을 수행해야 합니다.

     

    셀프 조인

    1
    2
    3
    4
    5
    6
    SELECT E1.EMPNO AS 사원
         , E1.MGR AS 관리자
         , E2.MGR AS 차상위_관리자
      FROM EMP E1, EMP E2
     WHERE E1.MGR = E2.EMPNO
     ORDER BY E2.MGR DESC, E1.MGR, E1.EMPNO;
    cs

     

    셀프 조인(Inner Join 일 때)

    1
    2
    3
    4
    5
    6
    SELECT E1.EMPNO AS 사원
         , E1.MGR AS 관리자
         , E2.MGR AS 차상위_관리자
      FROM EMP E1 INNER JOIN EMP E2
        ON E1.MGR = E2.EMPNO
     ORDER BY E2.MGR DESC, E1.MGR, E1.EMPNO;  
    cs

     

    내부 조인(Inner Join)을 사용할 경우 자신의 관리자가 존재하지 않는 경우에는 관리자(E2) 테이블에서 조인할 대상이 존재하지 않기 때문에 해당 데이터는 결과에서 누락됩니다. 이를 방지하기 위해서는 아우터 조인(Outer Join)을 사용해야 합니다.

     

    셀프 조인(Outer Join 일 때)

    1
    2
    3
    4
    5
    6
    SELECT E1.EMPNO AS 사원
         , E1.MGR AS 관리자
         , E2.MGR AS 차상위_관리자
      FROM EMP E1 LEFT OUTER JOIN EMP E2
       ON E1.MGR = E2.EMPNO
     ORDER BY E2.MGR DESC, E1.MGR, E1.EMPNO;  
    cs

     

    [Oracle] 조인[JOIN] - https://tychejin.tistory.com/101

    [Oracle] FROM 절 JOIN 형태 : https://tychejin.tistory.com/102

     

    반응형

    'RDS > Oracle' 카테고리의 다른 글

    [Oracle] 그룹 함수(Group Funtion)  (0) 2019.03.19
    [Oracle] 서브쿼리(Subquery)  (0) 2019.03.18
    [Oracle] 계층형 질의  (0) 2019.03.12
    [Oracle] 집합 연산자(SET OPERATOR)  (0) 2019.03.11
    [Oracle] FROM 절 JOIN 형태  (0) 2019.03.10

    댓글

Designed by Tistory.