[SQL] INNER JOIN과 LEFT JOIN

곽태민·2023년 3월 24일
0

INNER JOIN과 LEFT JOIN


❗️ INNER JOIN

  • 데이터의 교집합을 나타내며 겹치지 않는 행이 있을 경우에는 그 행은 결과값에서 제외가 된다.
SELECT * FROM user INNER JOIN role ON user.role_id = role.id;

❗️ LEFT JOIN

  • LEFT JOINOUTER JOIN 중 하나이며, LEFT OUTER JOIN으로 볼 수 있다.
  • OUTER JOIN합집합을 의미한다.
  • LEFT JOIN은 왼쪽의 모든 행을 조회하고, user 테이블의 role_id 필드 값이 NULL이면 role 테이블은 해당 행이 존재하지 않기 때문에 행의 필드 값은 NULL값으로 들어온다.
SELECT * FROM user LEFT JOIN role ON user.role_id = role.id;

⁉️ INNER JOIN과 LEFT JOIN의 차이점은?

1. 데이터 조회량 차이

  • 기준이 되는 from 테이블join해서 가져오는 테이블이 있을 때, 외래키를 갖는 데이터만 불러올지, 외래키가 없더라도 모든 데이터를 from 테이블 기준으로 조회할지 결정한다.
  • 비즈니스 로직 상 join 테이블에 가져올 필드에 데이터가 없어도 다 불러와야하면 LEFT JOIN을, 연관관계가 있는 정보만 불러오고 싶으면 INNER JOIN을 사용하면된다.

2. 성능 차이

  • INNER JOIN과 LEFT JOIN의 결과값이 같다면 INNER JOIN이 성능에서 유리한 편이다.
  • 쿼리문을 실행하면 데이터베이스에서 Optimzer에 의해서 최적화되어 정보를 조회하게 되는데, 복잡한 알고리즘이 필요한 경우에는 INNER JOIN이 성능상 유리할 수 있기 때문이다.
  • INNER JOIN은 Driving Table만 메모리에 올린 뒤에 Inner Table은 관계로만 찾고, LEFT JOIN은 두 테이블을 모두 메모리에 올리는 방식이다.
profile
Node.js 백엔드 개발자입니다!

0개의 댓글