SQL Right Join
SQL RIGHT JOIN: 오른쪽 테이블의 모든 데이터를 반환하고, 일치하지 않는 데이터는 NULL로 처리
SQL RIGHT JOIN(또는 RIGHT OUTER JOIN)은 두 개의 테이블을 결합할 때, 오른쪽 테이블의 모든 행을 반환하고, 왼쪽 테이블에 일치하는 데이터가 없으면 NULL을 반환합니다. RIGHT JOIN은 오른쪽 테이블에 있는 모든 데이터를 포함하되, 왼쪽 테이블에 대응하는 데이터가 없을 경우에는 NULL 값을 반환합니다.
1. 기본 RIGHT JOIN 문법
SELECT 열이름
FROM 테이블1
RIGHT JOIN 테이블2 ON 테이블1.열 = 테이블2.열;
- RIGHT JOIN: 오른쪽 테이블의 모든 행을 반환하고, 왼쪽 테이블에서 일치하는 행을 반환합니다. 일치하지 않는 경우 왼쪽 테이블의 데이터는 NULL로 표시됩니다.
- ON: 두 테이블을 연결하는 기준을 설정합니다. 일반적으로 두 테이블 간의 외래 키와 기본 키를 비교합니다.
2. SQL RIGHT JOIN 예제
2.1 기본 RIGHT JOIN
다음은 employees
테이블과 departments
테이블을 RIGHT JOIN으로 결합하여 모든
부서를 포함하고, 직원이 없는 부서는 NULL로 처리하는 예제입니다.
SELECT employees.name, departments.department_name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.id;
이 쿼리는 모든 부서를 반환하며, 부서에 속하지 않은 직원은 name이 NULL로 표시됩니다.
결과 예시:
name | department_name |
---|---|
John | Sales |
Jane | HR |
NULL | Marketing |
3. RIGHT JOIN과 조건 사용
RIGHT JOIN과 WHERE 절을 결합하여 조건에 맞는 데이터를 필터링할 수 있습니다.
예제: 직원이 없는 부서 조회
다음은 직원이 없는 부서(즉, name이 NULL인 부서)를 조회하는 예제입니다.
SELECT departments.department_name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.id
WHERE employees.name IS NULL;
이 쿼리는 직원이 없는 모든 부서를 반환합니다.
결과 예시:
department_name
Marketing
4. RIGHT JOIN과 집계 함수 결합
RIGHT JOIN을 사용하여 집계 함수와 결합할 수 있으며, 결합된 데이터에서 통계를 계산할 수 있습니다.
예제: 부서별 직원 수 계산 (직원이 없는 부서 포함)
SELECT departments.department_name, COUNT(employees.id) AS employee_count
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.id
GROUP BY departments.department_name;
이 쿼리는 각 부서별 직원 수를 계산하며, 직원이 없는 부서도 포함됩니다.
결과 예시:
department_name | employee_count |
---|---|
Sales | 3 |
HR | 2 |
Marketing | 0 |
5. RIGHT JOIN과 여러 테이블 결합
RIGHT JOIN을 여러 테이블과 결합하여 세 개 이상의 테이블을 동시에 사용할 수 있습니다.
예제: 직원, 부서, 프로젝트 정보를 결합하여 모든 부서 및 직원 조회
SELECT employees.name, departments.department_name, projects.project_name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.id
LEFT JOIN projects ON employees.project_id = projects.id;
이 쿼리는 모든 부서와 그에 속한 직원 및 프로젝트 정보를 결합하며, 부서 또는 프로젝트가 없는 경우에도 결과를 반환합니다.
결과 예시:
name | department_name | project_name |
---|---|---|
John | Sales | Alpha |
Jane | HR | NULL |
NULL | Marketing | NULL |
6. RIGHT JOIN과 NULL 값 처리
RIGHT JOIN에서는 왼쪽 테이블에 일치하는 값이 없을 때 NULL이 반환됩니다. 이를 적절히 처리하지 않으면 예상치 못한 결과가 발생할 수 있습니다. COALESCE() 함수를 사용하여 NULL 값을 처리할 수 있습니다.
예제: NULL 값을 기본값으로 대체
다음은 직원 이름이 없는 경우 **"No Employee"**라는 기본값을 표시하는 예제입니다.
SELECT COALESCE(employees.name, 'No Employee') AS employee_name, departments.department_name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.id;
이 쿼리는 직원이 없는 부서에 대해 **"No Employee"**를 표시합니다.
결과 예시:
employee_name | department_name |
---|---|
John | Sales |
Jane | HR |
No Employee | Marketing |
7. RIGHT JOIN과 대소문자 구분
RIGHT JOIN은 SQL에서 대소문자를 기본적으로 구분하지 않습니다. 문자열 비교에서 Sales와 sales를 같은 값으로 처리합니다. 대소문자를 구분해야 할 경우, 데이터베이스 시스템에 따라 BINARY 같은 키워드를 사용할 수 있습니다.
8. RIGHT JOIN vs LEFT JOIN
- RIGHT JOIN: 오른쪽 테이블의 모든 데이터를 반환하고, 왼쪽 테이블에 일치하지 않는 값은 NULL로 반환합니다.
- LEFT JOIN: 왼쪽 테이블의 모든 데이터를 반환하고, 오른쪽 테이블에 일치하지 않는 값은 NULL로 반환합니다.
둘의 차이는 결과 집합에서 주 테이블이 어느 쪽인지에 있습니다. LEFT JOIN은 왼쪽 테이블이 기준, RIGHT JOIN은 오른쪽 테이블이 기준입니다.
9. 실전 예제
예제 1: 부서와 직원 정보 결합 (직원이 없는 부서 포함)
SELECT e.name, d.department_name
FROM employees e
RIGHT JOIN departments d ON e.department_id = d.id;
이 쿼리는 모든 부서를 포함하고, 직원이 없는 경우는 NULL로 표시됩니다.
예제 2: 직원이 없는 부서만 조회
SELECT d.department_name
FROM employees e
RIGHT JOIN departments d ON e.department_id = d.id
WHERE e.name IS NULL;
이 쿼리는 직원이 없는 부서만 조회합니다.
예제 3: 부서별 직원 수 조회 (직원이 없는 부서 포함)
SELECT d.department_name, COUNT(e.id) AS employee_count
FROM departments d
RIGHT JOIN employees e ON d.id = e.department_id
GROUP BY d.department_name;
이 쿼리는 각 부서별로 직원 수를 계산하며, 직원이 없는 부서도 포함됩니다.
10. 요약
SQL RIGHT JOIN은 오른쪽 테이블의 모든 데이터를 반환하고, 왼쪽 테이블에서 일치하는 데이터가 없을 경우에는 NULL을 반환하는 방식의 JOIN입니다. 이를 통해 오른쪽 테이블의 모든 데이터를 조회하면서, 왼쪽 테이블과의 관계가 없는 데이터도 포함하여 조회할 수 있습니다. RIGHT JOIN은 특히 오른쪽 테이블의 모든 데이터를 기준으로 분석할 때 유용하며, COALESCE() 함수를 사용하여 NULL 값을 적절히 처리할 수 있습니다.