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