이번에는 Left outer Join과 Right outer join에 대해서 설명 드리겠습니다.

    저번에 Inner join에 대해서 설명을 드렸습니다. 

    대부분의 조인시에 inner join을 사용하시면 됩니다. 

    하지만 간혹 추가로 정보를 더 봐야 하는 경우가 있습니다. 

    그런 경우 left outer join을 사용해야 하는데요.. 

    그부분에 대해서 이번에 설명 드리겠습니다. 




     


    Inner join은 

    두개의 테이블에 공통된 Key값을 가진것의 데이터를 볼때 사용합니다.

    그래서 key값이 동일한 데이터에 대해서만 확인 가능합니다.

     

    이렇게 가운데의 데이터에 대해서만요.. 


    Left outer join은 

    왼쪽 테이블을 기준으로 오른쪽의 데이터를 붙여서 볼때 사용합니다. 

    그래서 B에 데이터가 없는것에 대해서도 결과가 보입니다. 

     

    자.. 이렇게요.. 

    근데 이렇게 그림만을 보게 되면 이해가 잘 안됩니다. 


    여기서 이해할것은 1가지 입니다.. 

    Left outer join은 왼쪽 테이블의 데이터에 같은 키값의 B의 데이터를 붙여서 보는것이다. 

    이것입니다. 


    자.. 이것을 실제 업무시에 적용을 했을때 어떻게 사용하는지 설명 드리겠습니다. 

    이렇게 설명 드리는게 가장 이해가 쉽더라구요. 

    예를 들어 제가 쇼핑몰을 운영을 하고 있습니다. 

    A테이블에는 상품의 정보 10개가 있고, B의 테이블에는 매출의 정보 5개가 있습니다.

    10개의 상품이 모두 팔리지는 않으니까요. 

    그래서 5개 매출이 있는 상품의 데이터만 있습니다. 


    이 두개의 테이블을 Inner join으로하여 데이터를 조회하면 

    매출이 있는 5개의 상품에 대해서 결과가 나옵니다. 

    5개행이 나오겠죠. 


    이번에는 이 두개의 테이블을 Left outer join으로 연결하여 조회를 해보면

    10개의 상품에 대해서 5개는 매출이 보여지고, 나머지 5개는 null로 보입니다. 

    10개행의 결과가 나옵니다.


    두개의 결과가 틀려지죠? 

    자 그럼 조금전에 설명 드린 부분과 매칭을 해보겠습니다. 

    Left outer join은 왼쪽 테이블의 데이터에 같은 키값의 B의 데이터를 붙여서 보는것이다. 

    왼쪽의 테이블에 상품의 정보 10개가 있고, 오른쪽에 5개에 대한 매출이 있습니다. 

    왼쪽 테이블의 데이터에 5개의 데이터가 있으니 데이터가 보여지고, 나머지는 데이터가 없으니 null로 들어갑니다. 

    위의 설명 부분이 이제 이해가 가시나요??


    이부분을 표로 그려보면 아래와 같습니다. 



    위의 표에서 KEY값을 보면 왼쪽과 오른쪽이 다릅니다. 

    Table1에는 A가 없고, Table2에는 DE가 없네요. 

    위의 설명 부분을 매칭 해보겠습니다. 

    왼쪽테이블의 데이터에 B의 데이터를 붙인다. 그중 없는 데이터는 Null로 보여준다.

     

    자 왼쪽 테이블의 정보에 동일한 키값에 대해서 오른쪽의 데이터를 붙여 주었습니다. 

    Table2의 A는 Table1에 없기 때문에 제외 되었습니다. 

    기준이 왼쪽 테이블이기 때문에 제외됩니다. 


    위의 내용을 SQL로 작성 해보면 아래와 같습니다. 

     

    Inner join과 틀려진것은 Left outer join으로 쓴것 하나밖에 없습니다. 

    그리 어렵지 않습니다. 


    자.. 그럼 Right outer Join에 대해서 설명 드리겠습니다.

    이건.. 알필요 없습니다... 

    써야할 의미를 모르겠습니다.. 왜냐... 

       

     

                                                               Right outer join                                            Left outer join


    자.. 몬가 똑같지 않습니까??

    그렇습니다. 테이블 이름만 바꿔서 Left outer join을 하면 동일한 결과가 나옵니다. 


      

    Right outer join                                 Left outer join


    ​제가 Right outer Join을 돌려 봤습니다. 

    Left outer join과 똑같은데 테이블 명만 다르네요.. 

    Table B Left outer join Table A on B.key = A.key

    이렇게 하면 Right outer join과 똑같습니다.

     

    그리고 저도 실업무에 사용할때가 있나 봤는데 한번도 사용을 안해봤습니다. 

    그냥 Left outer join만 사용해도 별문제 없었습니다. 

    아마 전문적으로  Database를 사용하시는분은 사용을 할지도 모르겠습니다. 


    자.. 그럼 여기서 Join을 할때 left outer join을 하면 inner join의 결과도 있기 때문에 

    Left outer join만 하면 되지 않냐라는 질문을 하실것입니다. 

    그렇게 해도 상관 없습니다. 

    대신 where절에 조건을 많이 넣어야 내가 원하는 자료를 볼수 있고, 

    그렇게 하면 안되는 가장 큰 이유는 성능이 저하가 될수 있습니다.



    예를 들어 보겠습니다. 

    A테이블에 100만개의 행데이터의 3개컬럼 

    B테이블에 10개의 행데이터 3개 컬럼

    C테이블에 5개의 행데이터 3개 컬럼 가 있습니다. 

    이것을 Inner로 조인을 하게 되면 두번째 테이블을 연결할때 100만개에서 키값이 동일한 10개의 값으로 

    줄어 듭니다. 거기에 C테이블 까지 붙이게 되면 5개의 데이터에 대해서 

    45개의 데이터가 나오고 거기에 where조건이 들어가게 됩니다. 


    하지만 left outer join을 하게되면 

    A테이블의 100만개에 B테이블의 10개 데이터를 붙이고. C테이블 까지 붙이게 되면

    100만행의 9개 컬럼이 되어 900만의 데이터에 대해서 

    Where조건이 들어가게 됩니다. 

    이렇게 데이터가 차이가 많이 나다 보니, Left outer join을 많이 쓰게 되면

    성능에 저하가 발생하여 데이터 추출의 시간이 오래 걸리거나 

    나오지 않는 경우가 발생합니다.

    자.. 이렇게 보면 차이가 많이 느껴지시죠?


    그래서 left outer join은 꼭 필요할때만 사용하시는것이 좋습니다. 

    다음번에는 실제 DB를 이용하여 Join하는것을 연습 해보겠습니다. 



    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기