개념적 이해가 부족한것은 아님.

JOIN = 테이블과 테이블을 연결 그리고 연결의 기준은 ON, 보통 PK ↔ FK.

INNER JOIN = 교집합
  • ON 조건에 매칭되는 것만
  • 한쪽이라도 없으면 결과에서 사라짐

LEFT JOIN = 왼쪽 기준 유지
  • 왼쪽 테이블: 무조건 남김
  • 오른쪽 테이블: 매칭되면 붙고, 없으면 NULL

해당 개념들은 머리속에 박혀있는 상태,

하지만 문제를 볼때마다 어떻게 해야할지, join을 써야하는지 생각이 제대로 되지 않음

 

고민한 결과...

JOIN이 어려운 이유는 “문법”도 아니고 “INNER / LEFT 구분”도 아니였다.
진짜 이유는 “결과가 어떻게 생길지 머릿속에 안 그려짐”

 

이 JOIN을 하면 행(row)이 몇 개 나올지..
왜 늘어났는지 / 왜 줄었는지...
내가 보고 싶은 단위가 학생인지 / 신청인지 / 결제인지...

이러한 판단이 JOIN을 치기 전까지 제대로 서지 않는다.

 


JOIN의 중요 포인트


① 기준 테이블을 언제 정해야 하는지

기준 테이블은 JOIN 종류가 아니라 “내가 보고 싶은 결과”가 정한다

 

때문에...

내가 보고 싶은 최종 행 단위는 뭐지?를 항상 생각하고, 결정하고, 적어두자
학생 1행?
신청 1행?
결제 1행?

나는, 문제는 뭘 보고 싶은건지 생각하자!

길게 걸리더라도 반드시 할것!


② 1:N 관계에서 행이 늘어나는 이유

예를 들어:

학생 1명
수강신청 3건

JOIN시 결과에서 학생 정보가 3번 반복됨

이걸 머리로는 아는데,
“아, 그래서 이 쿼리는 위험하구나 / 안전하구나” 판단이 안 섬

 

 

해결책!

지금 JOIN하면 항상 질문하면서, 생각하면서 풀기

?? “이 쿼리의 기준 테이블은 누구지?”
?? “기준 테이블 1행이 몇 행으로 불어날 수 있지?”

  • 1:1 → 안전
  • 1:N → 늘어남 (정상인지 판단)

만약 늘어난다면... 줄이는 방법도 생각하기

?? GROUP BY로 묶으면 줄어드나?
?? 어떤걸로 묶어야 하나?


③ ON이랑 WHERE가 섞이기 시작할 때

특히 LEFT JOIN에서:
ON: “어떻게 붙일지”
WHERE: “결과에서 뭘 버릴지”

이게 섞이면:
“어? LEFT JOIN 했는데 왜 결과가 사라지지?”

이 순간 생각이 과부화 됨

 

 

해결책!

ON과 WHERE에 대해 다시한번 생각하기

❗ ON 조건을 만족하지 못해도 LEFT JOIN은 왼쪽 행을 살린다 ❗

  • ON → 테이블을 어떻게 연결할지 →  ON은 붙이는 조건
  • WHERE → 연결된 결과에서 무엇을 제거할지 →  WHERE는 거르는 조건

❗ 중요 ❗
못 붙이면 NULL 붙인다
행 자체를 버리지는 않는다 (LEFT JOIN이니까)

 

 

먼저 생각하고 나면 on과 where를 어떻게 사용할지 감이 잡힐것이다!


다음 코드카타 때 해당 흐름들을 한문제씩 사용해보기!

+ Recent posts