Daily Dev Q&A: Inner Join vs Outer Join

2026. 1. 19. 09:17·Archive/Daily Dev Q&A

Topic (오늘의 주제)

SQL의 기초: Inner Join과 Outer Join의 차이

Why (왜 사용하는가? 왜 중요한가?)

  • 실무: RDB(관계형 데이터베이스)는 데이터를 여러 테이블에 쪼개서 저장(정규화)하므로, 이를 다시 합쳐서 조회하기 위해 JOIN은 숨 쉬듯이 사용됩니다. 잘못 쓰면 데이터가 누락되거나(Inner), 불필요한 NULL이 생기거나(Outer) 성능 이슈가 발생합니다.
  • 구조적 의미: 집합 이론에서 **교집합(Intersection)**이냐 부분 합집합이냐의 차이입니다.
  • 면접 의도: "A테이블에는 있고 B테이블에는 없을 때 데이터가 나오나요?"라는 질문에 정확히 답할 수 있는지, Left/Right Outer Join의 기준을 아는지 확인합니다.

Core Concept (핵심 개념 정리)

요소 Inner Join (내부 조인) Outer Join (외부 조인)
개념 정의 두 테이블에서 조건이 일치하는 데이터만 조회. (교집합) 조건이 일치하지 않아도, 기준 테이블의 데이터는 무조건 조회. (나머지는 NULL 채움)
종류 INNER JOIN LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN
동작 방식 A와 B에 모두 존재하는 키 값만 결과로 나옴.

하나라도 없으면 결과에서 탈락.
Left Join 예시: A(왼쪽)는 다 보여줌. B(오른쪽)에 매칭되는 게 없으면 B 컬럼은 NULL로 채워서 보여줌.
상황 예시 "주문을 한 적이 있는 회원만 뽑아라" (주문 없는 회원은 제외) "모든 회원을 뽑되, 주문 내역이 있으면 같이 보여줘라" (주문 없어도 회원은 나옴)
성능 일반적으로 처리할 데이터 양이 적어 더 빠름. 처리 데이터가 많고 NULL 처리가 필요해 상대적으로 느릴 수 있음.

Interview Answer Version (면접 답변식 요약)

"가장 큰 차이는 교집합이냐 아니냐입니다.

Inner Join은 두 테이블 간에 조인 조건이 일치하는 데이터만 가져오는 방식입니다.

반면 Outer Join은 매칭되는 데이터가 없더라도 기준이 되는 테이블(Left or Right)의 데이터는 모두 조회하고, 매칭되지 않는 빈 칸은 NULL로 채워서 가져오는 방식입니다.

데이터 누락 없이 전체 기준 데이터를 봐야 할 때는 Outer Join을 사용합니다."

Practical Tip (사용시 주의할 점 or 활용 예)

1. Left Join 시 순서 주의

  • A LEFT JOIN B와 B LEFT JOIN A는 결과가 완전히 다릅니다. "누가 기준(주인)인가?"를 항상 생각해야 합니다.
  • 보통 "데이터가 존재하는 쪽" 또는 "전체 목록을 보고 싶은 쪽"을 왼쪽에 둡니다. (예: 회원 목록을 다 보고 싶으면 Member가 왼쪽)

2. JPA에서의 사용 (Fetch Join)

  • JPA에서 성능 최적화를 위해 사용하는 Fetch Join은 기본적으로 Inner Join으로 동작합니다.
  • 만약 연관된 데이터가 없을 수도 있는 상황(예: 게시글에 댓글이 0개)에서 Fetch Join을 쓰면, Inner Join 특성상 게시글(기준 데이터)까지 아예 조회되지 않는 참사가 벌어집니다.
  • 이때는 left join fetch를 명시적으로 써야 합니다.

3. NULL 처리 (Coalesce)

  • Outer Join을 쓰면 필연적으로 NULL 값이 결과에 포함됩니다.
  • SQL에서는 IFNULL이나 COALESCE 함수를, 애플리케이션에서는 Optional 등을 사용해 NULL 처리를 확실하게 해야 NullPointerException을 막을 수 있습니다.

예상 꼬리질문 정리

  1. Q: ON 절과 WHERE 절의 차이는 무엇인가요? (Outer Join 시)
    • 핵심 키워드: Outer Join에서 ON 절에 조건을 걸면 조인하기 전에 필터링(조인 대상 결정)하지만, WHERE 절에 걸면 조인 결과를 다 만든 후에 필터링합니다. 결과가 달라질 수 있습니다.
  2. Q: Cross Join(Cartesian Product)은 무엇인가요?
    • 핵심 키워드: 조인 조건 없이 두 테이블의 모든 경우의 수를 다 조합하는 것(A행 개수 × B행 개수). 성능 폭망의 주범.
  3. Q: Full Outer Join은 MySQL에 없는데 어떻게 구현하나요?
    • 핵심 키워드: LEFT JOIN 결과와 RIGHT JOIN 결과를 UNION(합집합) 해서 구현합니다.

'Archive > Daily Dev Q&A' 카테고리의 다른 글

Daily Dev Q&A: 3-Way Handshake  (1) 2026.01.20
Daily Dev Q&A: TCP vs UDP  (0) 2026.01.20
Daily Dev Q&A: ApplicationContext  (0) 2026.01.19
Daily Dev Q&A: DNS  (0) 2026.01.14
Daily Dev Q&A: N+1 문제 & 해결책  (0) 2026.01.13
'Archive/Daily Dev Q&A' 카테고리의 다른 글
  • Daily Dev Q&A: 3-Way Handshake
  • Daily Dev Q&A: TCP vs UDP
  • Daily Dev Q&A: ApplicationContext
  • Daily Dev Q&A: DNS
tlsgkstj
tlsgkstj
짱구의 성장 일기
  • tlsgkstj
    코딩하는 짱구
    tlsgkstj
  • 전체
    오늘
    어제
    • 분류 전체보기 (159)
      • About (1)
      • Projects (35)
        • Personal Projects (21)
        • Team Projects (14)
      • Engineering (20)
        • CS & Tools (0)
        • Backend Core (15)
        • Frontend (1)
        • Infra & Cloud (2)
        • AI & Tools (1)
      • Trouble Shooting & Issues (0)
      • Growth & Career (38)
        • Interview Prep (0)
        • Retrospectives (38)
      • Archive (65)
        • TIL (8)
        • Daily Dev Q&A (56)
  • 블로그 메뉴

    • 홈
    • About
    • Projects
    • Tech Stack
    • Dev Log
    • GitHub
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    프로젝트회고
    DevFestIncheon2025
    til
    클로드코드
    Spring비교
    java
    경기기후바이브코딩
    spring
    aws_s3
    network
    OrphanRemova
    데브페스트
    커리어리셋
    jpa
    SpringBoot
    REACT
    Project_Review
    backend
    프로덕트개발자
    devlog
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
tlsgkstj
Daily Dev Q&A: Inner Join vs Outer Join
상단으로

티스토리툴바