일대다/다대일 관계에서 어느 쪽을 기준으로 조인하느냐에 따라 결과 행의 개수가 달라진다.
이 현상을 잘 이해해야 GROUP BY, COUNT 같은 집계 쿼리를 정확하게 작성할 수 있다.
먼저 기준이 되는 member 테이블을 그대로 조회해 보자.
SELECT * FROM member;
예상 결과:
| member_id | team_id | name |
|---|---|---|
| 1 | 1 | 김개발 |
| 2 | 1 | 박개발 |
| 3 | 2 | 최디자인 |
| 4 | NULL | 이기획 |
이제 각 회원에 팀 이름을 붙여서 조회한다. 팀이 없는 회원도 보고 싶으므로 LEFT JOIN 을 사용한다.
SELECT
m.name AS member_name,
t.name AS team_name
FROM member m
LEFT JOIN team t ON m.team_id = t.team_id;
예상 결과:
| member_name | team_name |
|---|---|
| 김개발 | 개발팀 |
| 박개발 | 개발팀 |
| 최디자인 | 디자인팀 |
| 이기획 | NULL |
member 행 수: 4N쪽 기준으로 1쪽을 조인하면 행 수가 늘어나지 않는다. 각 회원은 최대 하나의 팀만 가지기 때문이다.
이번에는 기준을 바꿔 team 테이블에서 시작한다.
SELECT * FROM team;
예상 결과: