INNER JOIN 은 양쪽에 다 있는 것만, LEFT OUTER JOIN 은 왼쪽은 다 남기고 오른쪽은 없으면 NULL 이다.
왜 그런지까지
조인 조건에 맞는 짝이 없으면 INNER JOIN 에서는 그 행이 사라진다. 그것이 문제가 될 때 OUTER JOIN 을 쓴다.
주의할 점은 OUTER JOIN 에서 조건을 WHERE 에 쓰면 다시 INNER 처럼 되어 버린다는 것이다. 오른쪽 표에 대한 조건은 ON 절에 적어야 한다. CROSS JOIN 은 조건 없이 모든 짝을 만들어 행 수가 곱해진다.
조인 종류
| 종류 | 남는 행 |
|---|---|
| INNER JOIN | 양쪽에 짝이 있는 행만 |
| LEFT OUTER | 왼쪽 전부 + 짝이 있으면 오른쪽 |
| RIGHT OUTER | 오른쪽 전부 + 짝이 있으면 왼쪽 |
| FULL OUTER | 양쪽 전부 |
| CROSS JOIN | 모든 짝 (행 수가 곱해진다) |
INNER 와 LEFT OUTER 의 행 수 차이
OUTER JOIN 의 조건을 ON 에 vs WHERE 에
ON 에 적으면 짝을 찾는 조건이라 왼쪽 행이 남지만, WHERE 에 적으면 조인이 끝난 뒤 거르므로 NULL 인 행이 사라져 INNER 와 같아진다.
NATURAL JOIN vs USING
NATURAL JOIN 은 이름이 같은 모든 열로 알아서 잇고, USING 은 지정한 열로만 잇는다. 둘 다 그 열에 별칭을 붙일 수 없다.
넣어 두면 오늘 · 1일 · 3일 · 7일 · 14일 · 30일 간격으로 다시 물어봅니다