PARTICIPATE PARTICIPATE 배워봅시다.
둘 이상의 테이블을 조인하여 데이터를 검색할 때 사용하는 방법입니다.
두 개의 테이블이 하나의 테이블인 것처럼 표시합니다.
JOIN의 종류
1) 내부 연결
조인 열 데이터는 기본 테이블과 조인 중인 테이블 모두에 있어야 쿼리할 수 있습니다.

2) 자연스러운 조합
공통 속성(column)을 기준으로 2개의 테이블을 2개 이상의 테이블로 결합하는 조인 방식으로 이 경우 공통 속성이 자동으로 매칭된다. 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) 외부 연결
3-1) 풀 아우터 조인
공통 부분만 선택하여 조인하는 INNER JOIN과 달리 비정상적인 행도 보존됩니다.
이때 두 테이블의 값을 그대로 유지하면 FULL OUTER JOIN
왼쪽 테이블 값만 유지하는 경우 LEFT OUTER JOIN
올바른 테이블 값만 유지하는 경우 RIGHT OUTER JOIN
MySQL은 FULL OUTER JOIN을 지원하지 않으므로 LEFT OUTER JOIN은
RIGHT OUTER JOIN 결과는 반드시 UNION이어야 하며 사용
3-2) 왼쪽 연결
왼쪽 테이블에서 일치하는 행만 결합되고 일치하지 않는 행은 null 값으로 채워집니다.

3-3) 오른쪽으로 연결

4) 교차 연결
두 개 이상의 테이블에 대해 가능한 모든 조합을 생성하는 조인 방법입니다.
크로스 조인은 첫 번째 테이블의 모든 레코드를 두 번째 테이블의 모든 레코드와 결합하여 새 테이블을 만듭니다.
