개념적 이해가 부족한것은 아님.
| JOIN = 테이블과 테이블을 연결 그리고 연결의 기준은 ON, 보통 PK ↔ FK. INNER JOIN = 교집합
LEFT JOIN = 왼쪽 기준 유지
|
해당 개념들은 머리속에 박혀있는 상태,
하지만 문제를 볼때마다 어떻게 해야할지, 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를 어떻게 사용할지 감이 잡힐것이다!
다음 코드카타 때 해당 흐름들을 한문제씩 사용해보기!
'F.SQL > 무엇이 문제인가' 카테고리의 다른 글
| 잠깐 짚고 가기: 서브쿼리와 join의 차이 및 사용 타이밍 (0) | 2026.01.12 |
|---|---|
| 잠깐 짚고 가기: 나는 문제를 보면 서브쿼리로 풀 생각을 못할까 (1) | 2026.01.07 |
| 잠깐 짚고 가기: 데이터 딕셔너리에 관하여 (0) | 2026.01.04 |
| 잠깐 짚고 가기: 수도코드와 Line by Line란 무엇인가 (0) | 2026.01.03 |
