JOIN은 SQL에서 두 개 이상의 테이블을 연결하여 원하는 데이터를 조회할 때 사용하는 명령입니다. JOIN을 사용하면 서로 다른 테이블에 저장된 관련 데이터를 하나의 결과로 결합할 수 있습니다. JOIN의 종류와 사용 예제를 자세히 설명드리겠습니다.기본적인 테이블 예시
두 개의 테이블이 있다고 가정해보겠습니다:
테이블: Employees
| EmployeeID | Name | DepartmentID | 
| 1 | Alice | 101 | 
| 2 | Bob | 102 | 
| 3 | Charlie | 101 | 
| 4 | David | 103 | 
테이블: Departments
| DepartmentID | DepartmentName | 
| 101 | HR | 
| 102 | IT | 
| 103 | Finance | 
| 104 | Marketing | 
1. INNER JOIN
INNER JOIN은 두 테이블 간의 매칭된 데이터를 반환합니다. 즉, JOIN 조건에 일치하는 행들만 반환됩니다.SELECT Employees.Name, Departments.DepartmentName
FROM Employees
INNER JOIN Departments
ON Employees.DepartmentID = Departments.DepartmentID;
결과:
| Name | DepartmentName | 
| Alice | HR | 
| Charlie | HR | 
| Bob | IT | 
| David | Finance | 
여기서 
INNER JOIN은 Employees 테이블의 DepartmentID와 Departments 테이블의 DepartmentID가 일치하는 행들만 반환합니다. 따라서 마케팅 부서(DepartmentID 104)에 대한 정보는 결과에 나타나지 않습니다.2. LEFT JOIN (또는 LEFT OUTER JOIN)
LEFT JOIN은 왼쪽 테이블(첫 번째 테이블)의 모든 데이터를 반환하고, 오른쪽 테이블에서 일치하는 데이터가 없으면 NULL 값을 반환합니다.SELECT Employees.Name, Departments.DepartmentName
FROM Employees
LEFT JOIN Departments
ON Employees.DepartmentID = Departments.DepartmentID;
결과:
| Name | DepartmentName | 
| Alice | HR | 
| Charlie | HR | 
| Bob | IT | 
| David | Finance | 
LEFT JOIN은 Employees 테이블의 모든 데이터를 반환하며, 모든 Employee가 DepartmentID와 일치하는 부서를 가지므로 이 예제에서는 NULL 값이 나타나지 않습니다. 하지만 만약 Employees에 DepartmentID가 없는 행이 있었다면, 그 행에 대해 DepartmentName은 NULL로 표시됩니다.3. RIGHT JOIN (또는 RIGHT OUTER JOIN)
RIGHT JOIN은 오른쪽 테이블(두 번째 테이블)의 모든 데이터를 반환하고, 왼쪽 테이블에서 일치하는 데이터가 없으면 NULL 값을 반환합니다.SELECT Employees.Name, Departments.DepartmentName
FROM Employees
RIGHT JOIN Departments
ON Employees.DepartmentID = Departments.DepartmentID;
결과:
| Name | DepartmentName | 
| Alice | HR | 
| Charlie | HR | 
| Bob | IT | 
| David | Finance | 
| NULL | Marketing | 
여기서 
RIGHT JOIN은 Departments 테이블의 모든 데이터를 반환하며, Employees 테이블에 일치하는 데이터가 없는 경우 NULL 값을 반환합니다. 마케팅 부서(DepartmentID 104)는 Employees 테이블에서 일치하는 데이터가 없기 때문에 Name 칼럼이 NULL로 반환됩니다.4. FULL OUTER JOIN
FULL OUTER JOIN은 두 테이블의 모든 데이터를 반환합니다. 일치하는 데이터가 없으면 NULL 값을 반환합니다.SELECT Employees.Name, Departments.DepartmentName
FROM Employees
FULL OUTER JOIN Departments
ON Employees.DepartmentID = Departments.DepartmentID;
결과:
| Name | DepartmentName | 
| Alice | HR | 
| Charlie | HR | 
| Bob | IT | 
| David | Finance | 
| NULL | Marketing | 
FULL OUTER JOIN은 Employees 테이블과 Departments 테이블의 모든 데이터를 반환합니다. Employees에 없는 마케팅 부서의 데이터는 Name이 NULL로 반환되며, 만약 Employees에 일치하지 않는 데이터가 있다면 그에 해당하는 DepartmentName도 NULL로 표시됩니다.5. CROSS JOIN
CROSS JOIN은 두 테이블 간의 카르테시안 곱을 반환합니다. 즉, 왼쪽 테이블의 각 행이 오른쪽 테이블의 모든 행과 결합됩니다.SELECT Employees.Name, Departments.DepartmentName
FROM Employees
CROSS JOIN Departments;
결과:
| Name | DepartmentName | 
| Alice | HR | 
| Alice | IT | 
| Alice | Finance | 
| Alice | Marketing | 
| Bob | HR | 
| Bob | IT | 
| Bob | Finance | 
| Bob | Marketing | 
| Charlie | HR | 
| Charlie | IT | 
| Charlie | Finance | 
| Charlie | Marketing | 
| David | HR | 
| David | IT | 
| David | Finance | 
| David | Marketing | 
CROSS JOIN은 Employees의 모든 행을 Departments의 모든 행과 결합하므로 4개의 Employees 행과 4개의 Departments 행이 결합하여 총 16개의 결과를 반환합니다.6. SELF JOIN
SELF JOIN은 같은 테이블을 두 번 조인하여 자신과 연결하는 것을 의미합니다.예를 들어, 직원 테이블에서 각 직원의 매니저를 찾고자 할 때 사용될 수 있습니다.
SELECT E1.Name AS Employee, E2.Name AS Manager
FROM Employees E1
LEFT JOIN Employees E2
ON E1.ManagerID = E2.EmployeeID;
이 예제에서 
Employees 테이블을 두 번 사용하여 각 직원의 매니저 이름을 찾습니다.Share article