DBMS/MySQL

LEFT JOIN, INNER JOIN 차이

블로그 주인장 2024. 1. 6.

프로젝트로 게시판을 만들면서 각 카테고리에 따라 테이블을 나누어 작성한 후,

정보를 가져오는 경우 테이블을 합치는 경우가 있다.

 

이 때 JOIN 을 사용하게 되는데, 그 중 많이 사용하는 LEFT JOIN 과 INNER JOIN에 대해 알아보겠습니다.

 

게시판의 댓글과 게시글을 이용해서 예시를 들것입니다.

이 때 사용할 DBMS는 MYSQL 이다.

 

게시글 테이블

 

댓글 테이블

 

OUTER JOIN - 합집합

 

LEFT JOIN은 OUTER JOIN 의 일종이다. 따라서 LEFT OUTER JOIN 이라고 볼 수 있다.

OUTER JOIN 은 합집합을 의미한다.

 

여기서 LEFT JOIN은 왼쪽의 모든 행을 조회한다.

select * from post 
left join comment
on post.id = comment.post_id;

 

따라서 해당 쿼리를 날리게 되면 게시글의 댓글이 없으면 해당 게시글에는 댓글이 없는 것으로

댓글 테이블의 칼럼에 해당하는 값들은 전부 NULL 값으로 처리가 된다.

 

빨간색 네모 댓글 테이블 NULL 처리

 

 

INNER JOIN - 교집합

반대로 INNER JOIN은 교집합이다.

따라서 겹치지 않는다면 그 행은 결과에서 제외된다.

 

select * from post 
inner join comment
on post.id = comment.post_id;

 

결과를 보면 이전 LEFT JOIN 과 달리 댓글 테이블의 null 인 행이 결과에서 제외된 것을 볼 수 있다.

 

 

성능 차이

두 테이블에서 JOIN을 위한 기준 열이 서로 값을 가지고 있는 경우 조회에서 누락되는 행은 존재하지 않는다.

 

그렇다면 LEFT JOIN과 INNER JOIN은 같은 조회 결과를 보인다.

 

이때, INNER JOIN이 상대적으로 성능이 좋다고 한다.

 

 

마무리

LEFT JOIN은 합집합INNER JOIN은 교집합이다.
결과가 같다면 LEFT JOIN 대신 INNER JOIN을 사용하는 게 좋다는 것도 알게 되었다.

 

글로만 이해하고 넘어갔었는데, 그림으로 확인하고 직접 쿼리문을 작성해서 날려보면서

확실하게 개념정리를 할 수 있었다.

 

 

반응형

댓글