SQL

SELF JOIN(자기조인)

에어팟맥스 2022. 7. 8. 21:19

자기자신의 테이블(뷰)을 자기자신의 테이블(뷰)과 JOIN 시키는 것을 말한다.
       이때 반드시 테이블(뷰)에 대한 alias(별칭)를 달리 주어서 실행해야 한다.

 

--- 아래처럼 나오도록 하기 ---

 

-------------------------------------------------------------------------------------------------------
    사원번호              사원명             이메일     급여      직속상관번호             직속상관명
  employee_id   first_name || last_name    email     salary   employee_id      first_name || last_name
  -------------------------------------------------------------------------------------------------------
     100             Steven King           SKING     24000     null                 null 
     102             Lex De Haan           LDEHAAN   17000     100                  Steven King
     103             Alexander Hunold      AHUNOLD   9000      102                  Lex De Haan
     104             Bruce Ernst           BERNST    6000      103                  Alexander Hunold
-------------------------------------------------------        ---------------------------------------
     사원번호              사원명             이메일     급여            직속상관번호             직속상관명
    -------------------------------------------------------        ---------------------------------------
                       사원자신의 정보                                           직속상관의 정보
                      employee 테이블                                          employee 테이블
                           E1                                                       E2

 

[SQL 1992 CODE 방식]

    select E1.employee_id as 사원번호
          , E1.first_name || ' ' || E1.last_name as 사원명  
          , E1.email as 이메일    
          , E1.salary as 급여
          , E2.employee_id as 직속상관번호
          , E2.first_name || ' ' || E2.last_name as 직속상관명
     from employees E1, employees E2
     where E1.manager_id = E2.employee_id(+)
     order by 1;

 

[SQL 1999 CODE 방식]

    select E1.employee_id as 사원번호
          , E1.first_name || ' ' || E1.last_name as 사원명  
          , E1.email as 이메일    
          , E1.salary as 급여
          , E2.employee_id as 직속상관번호
          , E2.first_name || ' ' || E2.last_name as 직속상관명
     from employees E1 LEFT JOIN employees E2
     ON E1.manager_id = E2.employee_id
     order by 1;

 

 

 


SELF JOIN 을 사용하여 공저(도서명은 동일(=) 하지만 작가명이 다른(!=) 도서)로 지어진 도서정보를 나타내기

       ---------------------------------
         도서명         작가명    로얄티
       ---------------------------------  
         로빈슨크루소    한석규    800
         로빈슨크루소    이순신    500
         그리스로마신화  유관순   1200
         그리스로마신화  이혜리   1300
         그리스로마신화  서강준   1700
       ---------------------------------

 

[SQL 1992 CODE 방식]

     select distinct T1.*
     from tbl_authorbook T1, tbl_authorbook T2
     where T1.bookname = T2.bookname and T1.authorname != T2.authorname;

 

[SQL 1999 CODE 방식]

     select distinct T1.*
     from tbl_authorbook T1 join tbl_authorbook T2
     on T1.bookname = T2.bookname and T1.authorname != T2.authorname;