INNER JOIN과 LEFT JOIN
❗️ INNER JOIN
- 데이터의 교집합을 나타내며 겹치지 않는 행이 있을 경우에는 그 행은 결과값에서 제외가 된다.
SELECT * FROM user INNER JOIN role ON user.role_id = role.id;
❗️ LEFT JOIN
- LEFT JOIN은 OUTER 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은 두 테이블을 모두 메모리에 올리는 방식이다.