JOIN
보통 일반 JOIN (INNER JOIN) 과 LEFT JOIN 만 사용한다.
일반 JOIN으로 실제 겹치는 놈들만 뽑거나
LEFT JOIN으로 왼쪽 테이블을 기준으로 삼되, 오른쪽 테이블에 짝이 없으면 NULL로 채워서라도 왼쪽 데이터는 다 살린다.
RIGHT JOIN은 테이블 순서만 바꾸면 LEFT JOIN과 동일하니 LEFT JOIN으로 퉁치고,
CROSS_JOIN은 카테시안 곱인데 진짜 쓸일이 없다.
따라서 INNER JOIN과 LEFT JOIN이 제일 중요하다.
- INNER JOIN
- 양쪽 테이블에 연관된 놈들끼리만 합침
- ON 절을 만족하는 칼럼들끼리만 합침
- LEFT JOIN
- 왼쪽 테이블에 있는 row들은 전부 다 표현한다.
- 왼쪽 테이블의 row들 중 오른쪽 테이블과 매칭되지 않는 row들도 모두 표현함!
- 오른쪽 테이블과 매칭되지 않는 왼쪽 테이블 Row의 칼럼은 모두 NULL로 표현된다.
- LEFT JOIN이 LEFT OUTER JOIN이다!
- OUTER JOIN
- LEFT JOIN, RIGHT JOIN이다
- 왼쪽 테이블 또는 오른쪽 테이블은 무조건 다 표현한다
- CROSS JOIN
- 카테시안 곱 (Cartesian Product)
- 왼쪽 테이블 row 하나 당 오른쪽의 모든 row와 엮어 표현한다.
[INNER JOIN]

ON 절에 대한 교집합에 해당하는 Row들만 따로 내놓는다.
SELECT customer_name
FROM borrower
JOIN loan
ON borrower.loan_number = loan.loan_number;
SELECT *
FROM borrower
INNER JOIN loan
ON borrower.loan_number = loan.loan_number;
NATURAL JOIN은 자동 INNER JOIN 이라고 생각하면 된다.
공통된 칼럼을 알아서 찾아서 INNER JOIN 시켜준다.
[LEFT JOIN]

왼쪽 테이블은 모두 다 살린 채 JOIN 해준다.
ON 절에 맞는 오른쪽 테이블에서 매칭된 애들만 표현한다.
https://school.programmers.co.kr/learn/courses/30/lessons/299305
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
[CROSS JOIN]

카테시안 곱이다.
실제로는 별로 안쓴다.
카테시안 곱을 할 이유도 없고 테이블이 너무 커 하면 테이블이 폭발해버린다.
[NATURAL JOIN]
공통된 칼럼을 알아서 찾아서 INNER JOIN 시켜줌
즉 INNER JOIN의 한 종류이다
SELECT *
FROM borrower
NATURAL JOIN loan;
[OUTER JOIN]
굳이 OUTER JOIN을 사용하지 않는다.
LEFT JOIN이 곧 OUTER JOIN이기 때문이다.

매칭되는 행이 없어도 결과에 포함시키고, 없는 경우 NULL로 표시해준다.
LEFT JOIN = LEFT OUTER JOIN
RIGHT JOIN = RIGHT OUTER JOIN
FULL OUTER JOIN은 왼쪽, 오른쪽 Row를 모두 살린다.
그러면서 왼쪽 테이블과 오른쪽 테이블에서 서로 매칭되는 애들만 합쳐준다.
[FULL OUTER JOIN vs CROSS JOIN]
- FULL OUTER JOIN (대통합): "야, 우리 식구든 저쪽 식구든 일단 다 모아봐. 근데 같은 놈들끼리는 줄 맞춰서 서고, 짝 없는 놈들은 그냥 혼자 서 있어라." (연결 고리 있음)
- CROSS JOIN (무대포): "명분이고 뭐고 필요 없다. 그냥 다 엉겨 붙어! 한 명당 상대방 전부랑 한 번씩 다 악수해!" (연결 고리 없음)