회사에서 작업을 하다가 무지성으로 leftJoin
을 한 코드를 innerJoin
으로 바꾸는게 어떻냐는 피드백을 받았다. 평소에 join을 할일이 생기면 무조건 leftJoin
을 해서 데이터를 가져오려고 했기에 이 둘의 차이점을 알고 있지 못했다. (왜 -1 레벨을 파고들지 않았는가...)
일단 반성은 나중에 하고, leftJoin
과 innerJoin
의 차이점을 살펴보자.
먼저 아래 예시와 같은 테이블들이 있다고 가정해 보자.
여기서 유저 테이블 card_id
를 기준으로 join해서 가져온다고 하면,
SELECT *
FROM user_table
LEFT JOIN card_table
ON user_table.card_id = card_table.id
이렇게 명령어를 치면 아래와 같은 테이블이 나올 것이다.
위와 같이 left join
은 왼쪽 테이블 모든 행들에 join을 진행한다. 유저테이블에서 첫 번째 row card_id
가 null
이라고 해도!
같은 쿼리인데, 이번에는 innerJoin
을 해보자.
SELECT *
FROM user_table
INNER JOIN card_table
ON user_table.card_id = card_table.id
이 명령어는 아래와 같은 결과를 가져온다.
card_id
값이 null
인 철수는 innerJoin
작업을 진행하지 않는다. 따라서 실제 card_id
값이 있는 유저들만 card를 붙여 가져오고 싶은 경우에는 innerJoin
이 더 좋아 보인다. 만약 card_id
가 값이 null
인 row들이 많다면 innerJoin
쿼리가 훨씬 경제적일 수 있다.
이렇게 때와 상황에 맞게 leftJoin
, innerJoin
을 분별해서 써야한다. 각 쿼리 특징을 이해하고 상황에 맞게 적절한 쿼리를 사용할 수 있어야 한다.