본문 바로가기

프로그래밍/Database

[MySQL] Inner Join과 Left Join의 차이

반응형

신입 개발자 면접에서 단골 질문이었다.

" Inner Join과 Outer Join의 차이점을 아시나요? "

아마 join과 관련된 차이점을 검색할 때 가장 많이 나오는 이미지가 아래의 이미지일 것이다.

 

가장 간단하게 표현하면

  • Inner Join : Table A와 Table B의 교집합을 조회
  • Outer Join : Table A와 Table B의 합집합을 조회

사물의 이름을 저장하고 있는 table_A와 무게를 저장하고 있는 table_B, 그리고 해당 사물과 무게의 관계를 표현하는 rel_table_a_b 3개가 있는 상황이라고 해보자.

 

table_A
table_B
rel_table_a_b

Left Join 즉, Left Outer Join을 한 결과는 아래와 같다.

select *
    from table_a as a
        left join rel_table_a_b as rel on rel.a_idx = a.idx
        left join table_b as b on b.idx = rel.b_idx

left join은 table_a에 있는 모든 행과 rel_table_a_b에 함께 있는 행을 모두 얻게 된다.

그렇기 때문에 table_a의 값 중에서 relation table에 포함되지 않는 delta(idx=4)와 east(idx=5)도 함께 조회하게 된다.

 

하지만 두 테이블의 교집합 만을 조회하는 Inner Join의 결과는 아래와 같다.

select *
    from table_a as a
        inner join rel_table_a_b as rel on rel.a_idx = a.idx
        left join table_b as b on b.idx = rel.b_idx

table_a의 idx와 rel_table_a_b의 a_idx 값이 동일한 값들만 조회하기 때문에 교집합에 해당하는 apple, bob, charlie만 가져온다.

 

경우에 따라서 다르겠지만, 

위의 결과와 같이 left join보다 inner join을 사용할 경우 추가적으로 join 또는 연산해야 하는 target data의 수가 확연히 줄기 때문에 습관적인 left join 보다는 query의 성능을 위해서 inner join을 적절히 사용하는 것이 좋을 것이다.

반응형