SQL 기본 JOIN
JOIN JOIN JOIN 공부하자.
두 개 이상의 테이블을 서로 연결하여 데이터를 검색할 때 사용하는 방법
두개의 테이블을 마치 하나의 테이블인 것 처럼 보여준다.
JOIN 의 종류
1) INNER JOIN
기준 테이블과 조인할 테이블 모두에 조인 컬럼 데이터가 존재해야 조회가 된다.

2) NATURAL JOIN
두개 이상의 테이블에서 공통된 속성(컬럼)을 기준으로 두 테이블을 결합하는 조인의 종류이며, 이때 공통된 속성은 자동으로 매칭된다. 따로 명시적으로 조인할 컬럼을 지정할 필요 X
예를들어 다음과 같은 두 개의 테이블이 있다고 가정
Table1: Employee
+----+-------+------+
| id | name | age |
+----+-------+------+
| 1 | John | 32 |
| 2 | Alice | 27 |
| 3 | Bob | 24 |
+----+-------+------+
Table2: Department
+----+---------------+
| id | department |
+----+---------------+
| 1 | Sales |
| 2 | Marketing |
+----+---------------+
이 경우, EMPLOYEE 테이블과 DEPARTMENT 테이블의 공통 속성은 ID
NATURAL JOIN을 사용해 두 테이블을 결합한다면 결과는 다음과 같을것.
SELECT * FROM Employee NATURAL JOIN Department;
+----+-------+------+---------------+
| id | name | age | department |
+----+-------+------+---------------+
| 1 | John | 32 | Sales |
| 2 | Alice | 27 | Marketing |
+----+-------+------+---------------+
위의 결과에서 볼 수 있듯, ID 컬럼이 자동으로 매칭되고, 결과에는 ID 컬럼과 다른 공통된 속성인 DEPARTMENT 컬럼이 포함된다.
하지만 NATURAL JOIN 사용시 주의해야 할 점은, 두 테이블에서 동일한 이름을 가진 컬럼에 대해서만 매칭을 수행하기 때문에 컬럼명과 타입을 잘 지정해야함. 컬럼명이 다를 경우 명시적으로 조인할 컬럼을 지정해야한다.
Table1: Employee
+----+-------+------+
| id | name | age |
+----+-------+------+
| 1 | John | 32 |
| 2 | Alice | 27 |
| 3 | Bob | 24 |
+----+-------+------+
Table2: Department
+----+---------------+
| did | department |
+----+---------------+
| 1 | Sales |
| 2 | Marketing |
+----+---------------+
위의 예제에서는 Employee 테이블의 id 컬럼과 Department 테이블의 did 컬럼이 서로 다른 이름을 가지고 있다. 따라서 NATURAL JOIN을 수행하면 컬럼명이 일치하지 않아서 조인이 실패함
SELECT * FROM Employee JOIN Department ON Employee.id = Department.did;
이렇게 명시적으로 설정해 줘야함.
3) OUTER JOIN
3-1) FULL OUTER JOIN
공통된 부분만 골라서 결합하는 INNER JOIN과 다르게 공통되지 않은 행도 유지함.
이때 두 테이블 모두의 값을 유지하면 FULL OUTER JOIN
왼쪽 테이블 값만 유지하면 LEFT OUTER JOIN
오른쪽 테이블 값만 유지하면 RIGHT OUTER JOIN
MySQL에서는 FULL OUTER JOIN을 지원하지 않으므로, LEFT OUTER JOIN 결과와
RIGHT OUTER JOIN 의 결과를 UNION 하여 사용해야함
3-2) LEFT JOIN
왼쪽 테이블을 기준으로 일치하는 행만 결합되고, 일치하지 않는 부분은 null 값으로 채워짐.

3-3) RIGHT JOIN

4) CROSS JOIN
두개 이상의 테이블에서 가능한 모든 조합을 만들어내는 조인방식.
크로스 조인을 수행하면, 첫 번째 테이블의 모든 레코드와 두번째 테이블의 모든 레코드가 조합되어 새로운 테이블이 생성됨.