SQL JOIN과 서브쿼리 기본 개념과 활용 방법
SQL에서 JOIN(조인)과 서브쿼리(Subquery)는 데이터베이스에서 여러 테이블을 결합하거나 특정 데이터를 추출하는 데 필수적인 개념입니다.
이번 글에서는 SELF JOIN, CROSS JOIN, INNER JOIN을 중심으로 개념을 설명하고, 실습을 위한 샘플 테이블과 쿼리 실행 결과를 함께 알아보겠습니다.
1. SELF JOIN: 같은 테이블 간 관계 연결
SELF JOIN은 같은 테이블을 서로 조인하여 관계를 분석하는 데 사용됩니다.
일반적으로 조직도(상하 관계) 또는 제품 카테고리(부모-자식 관계) 같은 데이터를 처리할 때 유용합니다.
예를 들어 직원(Employee) 테이블에서 관리자(Manager)와 직원(Employee)의 관계를 조회할 때 활용할 수 있습니다.
SELECT E1.EmployeeName AS Employee, E2.EmployeeName AS Manager
FROM Employees E1
LEFT JOIN Employees E2
ON E1.ManagerID = E2.EmployeeID;
이 쿼리는 Employees 테이블을 두 번 사용하여 자기 자신과 조인하는 방식입니다.
E1.ManagerID = E2.EmployeeID 조건을 적용하면, 각 직원(Employee)이 속한 관리자의 이름을 찾을 수 있습니다.
결과적으로, 관리자가 없는 직원(예: CEO)은 Manager 값이 NULL로 나타납니다.
2. CROSS JOIN: 모든 조합 데이터 생성
CROSS JOIN은 두 개의 테이블을 조인하여 각 행의 모든 조합을 생성하는 방식입니다.
카테시안 곱(Cartesian Product)이라고도 불리며, 한 테이블의 행 수 × 다른 테이블의 행 수만큼의 결과가 생성됩니다.
예를 들어 모든 직원과 모든 부서를 조합하여 출력할 때 사용됩니다.
SELECT E.EmployeeName, D.DepartmentName
FROM Employees E
CROSS JOIN Departments D;
이 쿼리는 Employees 테이블의 모든 직원과 Departments 테이블의 모든 부서를 조합하여 출력합니다.
만약 Employees 테이블에 5명의 직원이 있고, Departments 테이블에 4개의 부서가 있다면, 결과적으로 5 × 4 = 20개의 행이 반환됩니다.
특정 조건 없이 모든 조합을 생성하므로, 필요에 따라 WHERE 절을 추가하여 필터링하는 것이 중요합니다.
3. INNER JOIN: 일치하는 데이터만 조회
INNER JOIN은 두 개 이상의 테이블을 조인할 때, 각 테이블 간 공통된 값을 가진 행만 출력하는 방식입니다.
일반적으로 테이블 간 관계를 설정할 때 기본 키(PK)와 외래 키(FK)를 기준으로 조인을 수행합니다.
SELECT E.EmployeeName, D.DepartmentName, E.Salary
FROM Employees E
INNER JOIN Departments D
ON E.DepartmentID = D.DepartmentID;
4. SELF JOIN, CROSS JOIN, INNER JOIN 비교
JOIN 유형 | 기능 | NULL 값 처리 | 사용 예시 |
SELF JOIN | 같은 테이블을 두 번 사용하여 관계 조회 | NULL 값 유지 | 직원-관리자 관계, 제품 카테고리 |
CROSS JOIN | 모든 조합(카테시안 곱)을 생성 | NULL 값 포함 가능 | 모든 직원과 모든 부서 조합 출력 |
INNER JOIN | 두 테이블 간 일치하는 데이터만 조회 | NULL 값이 있는 행 제외 | 직원이 속한 부서 정보 출력 |
SQL에서 JOIN을 활용하면 데이터를 더 풍부하게 분석할 수 있으며, 실무에서 여러 테이블의 데이터를 연결하여 조회하는 데 필수적으로 사용됩니다.
SQLD 자격증 시험에서는 JOIN의 개념과 차이점, 실행 순서 등을 정확히 이해하는 것이 중요합니다.
직접 SQL을 실행하며 JOIN 연습을 해보세요!