밤빵's 개발일지
[TIL]20240907 OUTER JOIN 본문
N+1문제를 해결하면서 기술매니저님의 조언에 따라 OUTER JOIN에 대해 알아보는데.... 내가 해결한 방법이 아우터조인이였다. INNER JOIN으로 해결한게 아니라 LEFT JOIN으로 그냥 해결했다! 라고 생각한게 바보였다. 그래서 오늘은 INNER JOIN과 OUTER JOIN을 비교하는 주제로 개발일지를 작성하기로 했다.
SQL에서 가장 자주 사용되는 두 가지 조인 방식인 INNER JOIN과 OUTER JOIN에 대한 정리!
▶ INNER JOIN
INNER JOIN은 두 테이블 간의 연관된 데이터를 가져올 때 사용한다. 이 조인은 두 테이블 모두에 해당하는 값이 있을 때만 결과에 포함되며, 일치하지 않는 데이터는 결과에서 제외된다. 간단히 말해, 교집합과 같은 개념이다.
→ 장점:
필요하지 않은 데이터를 제외하여 결과 집합이 작고 성능이 좋다.
데이터가 항상 일관성 있게 연결된 상태에서만 데이터를 조회할 수 있어 명확한 결과를 얻는다.
→ 단점:
두 테이블에 일치하는 데이터가 없으면 결과에 아무것도 나타나지 않는다.
모든 데이터, 특히 관계를 맺지 않는 데이터를 조회하려는 경우 적합하지 않다.
SELECT *
FROM Members m
INNER JOIN Commissions c ON m.id = c.member_id;
→ 이 쿼리는 Members와 Commissions 테이블에서 연결된 데이터만 가져오고, 만약 연관된 Commissions가 없다면 Members의 데이터도 결과에서 제외된다.
▶OUTER JOIN
OUTER JOIN은 연결된 데이터뿐만 아니라, 연결되지 않은 데이터도 함께 가져오는 방식이다. LEFT JOIN과 RIGHT JOIN으로 나뉘며, 각각 왼쪽 또는 오른쪽 테이블의 데이터를 모두 포함한다.
▷ LEFT JOIN:
왼쪽 테이블의 모든 데이터를 가져오고, 연결되지 않은 오른쪽 테이블의 데이터는 NULL로 표시된다.
▷ RIGHT JOIN:
오른쪽 테이블의 모든 데이터를 가져오고, 연결되지 않은 왼쪽 테이블의 데이터는 NULL로 표시된다.
→ 장점:
연관되지 않은 데이터까지 포함하여 더 많은 데이터를 조회할 수 있다.
특정 테이블에 데이터가 없어도 다른 테이블의 데이터를 유지할 수 있다.
→ 단점:
결과 집합이 커질 수 있어 성능이 저하될 가능성이 있다.
불필요한 데이터를 조회하게 될 수 있다.
SELECT *
FROM Members m
LEFT JOIN Commissions c ON m.id = c.member_id;
→ 이 쿼리는 Members의 모든 데이터를 가져오며, 만약 Commissions에 해당하는 데이터가 없으면 NULL로 채워진다. N+1 문제에서 해결책으로 사용할 수 있었던 이유는, Members에 관련된 Commissions가 없더라도 Members의 데이터는 가져오고, Commissions는 NULL로 처리하기 때문이다.
▶ INNER JOIN과 OUTER JOIN 비교
→ INNER JOIN은 양쪽 테이블에 반드시 연관된 데이터가 있을 때 유용하며, 불필요한 데이터가 제거되어 성능이 좋다.
→ OUTER JOIN은 연관 데이터뿐만 아니라 모든 데이터를 가져와야 할 때 유용하며, 데이터 손실을 방지할 수 있지만 결과가 클수록 성능이 저하될 수 있다.
▶정리
INNER JOIN은 데이터가 명확하게 연결되어 있는 경우에 적합하며, OUTER JOIN은 데이터가 없는 경우에도 데이터를 유지하고자 할 때 유리하다. 각 조인 방법의 장단점을 이해하고, 상황에 맞는 방식으로 적용하는 것이 중요하다.
'개발Article' 카테고리의 다른 글
[TIL]20240909 스택 트레이스(Stack Trace) (0) | 2024.09.09 |
---|---|
[WIL]20240908 도메인 계층 (0) | 2024.09.08 |
[TIL]20240906 kotlin (0) | 2024.09.07 |
[TIL]20240905 프로그래밍 언어가 많은 이유 (0) | 2024.09.05 |
[TIL]20240904 commit & merge (0) | 2024.09.05 |