본문 바로가기
CS/DataBase

[DataBase]inner join과 left join의 차이

by BK0625 2023. 5. 12.
반응형

지금까지 개발을 하면서 제일 많이 썼던 JOIN 방식 중 두개의 차이를 알아보고자 한다.

 

보통 JOIN 연산의 경우 데이터를 가지기 위해 테이블을 합치는 경우가 많은데 이 때 inner join과 left join을 많이 쓰게 된다.

 

이 두가지 방식의 차이점을 알아보자.

 

예시를 위해 개발하고 있는 프로젝트의 게시판 테이블과 게시판 댓글 테이블을 사용해 예시를 들겠다.

 

게시판 테이블의 행은 106개이고 댓글 테이블의 행은 52개이다.

 

이것이 게시판 테이블

 

이것이 댓글 테이블

 

LEFT JOIN

left join은 outer join의 일종이다. 여기서 중요한건 outer join은 합집합을 의미한다는 것이다. 따라서 왼쪽에 있는 테이블의 모든 행을 조회하게 된다. 

 

 

 

쿼리를 이렇게 날리게 되면 왼쪽에 있는 테이블인 board 테이블의 모든 행을 다 조회하게 된다는 뜻이다. 따라서 조인되었을 때 해당 게시글에 댓글이 없으면 해당 게시글에 댓글이 없는 것이므로 comment 테이블의 컬럼에 해당되는 값들은 전부 null 값으로 처리가 된다.

 

left join

 

 

댓글이 있으면 댓글이 표시가 되지만 없으면 null 값이 출력된다. 즉 합집합이기 때문에 

 

 

이런 식의 데이터가 출력됨을 볼 수 있다. 그래서 총 134개의 행이 출력되었다.

 

 

INNER JOIN 

반대로 inner join은 교집합이다. 따라서 겹치지 않는다면 그 행은 결과에서 제외된다.

 

거두절미하고 실행해보자.

 

inner join

 

 

겹치는 데이터만 출력하기 때문에 null 값은 없는것은 물론이고 댓글 테이블의 행의 개수와 같은 52개의 행이 출력이 되었다. 

 

 

즉 요런 그림으로 표현할 수 있다.

 

 

 

물론 left join에서도 join을 위한 기준 열이 서로 값을 가지고 있거나 where 절의 조건을 추가한다면 inner join과 같은 결과를 만들어낼수도 있겠다만 교집합만 고려하는 inner join이 상대적으로 성능이 좋다고 한다.

 

즉 상황에 맞게 쓰되 동일한 결과라면 inner join을 쓰는게 바람직하다고 볼 수 있겠다.

 

 

 

공부하면서 정리한 내용입니다. 틀린 내용 지적해주시면 감사히 받겠습니다:)

반응형