SQL Inner Join
SQL INNER JOIN: 두 테이블 간의 일치하는 데이터 조회
SQL INNER JOIN은 두 개 이상의 테이블을 결합하여 공통된 값을 가진 데이터만 조회할 때 사용됩니다. INNER JOIN은 두 테이블의 특정 열을 비교하여 해당 값이 일치하는 행만 반환합니다. 일치하지 않는 데이터는 결과에 포함되지 않으므로, 필요한 데이터만 조회할 수 있습니다.
1. 기본 INNER JOIN 문법
INNER JOIN의 기본 문법은 다음과 같습니다:
SELECT 열이름
FROM 테이블1
INNER JOIN 테이블2 ON 테이블1.열 = 테이블2.열;
- INNER JOIN: 두 테이블을 결합하며, 일치하는 행만 반환합니다.
- ON: JOIN할 때 사용할 조건을 명시하며, 일반적으로 두 테이블 간에 공통된 키(외래 키 및 기본 키)를 사용합니다.
2. SQL INNER JOIN 예제
2.1 기본 INNER JOIN
다음은 employees
테이블과 departments
테이블을 INNER JOIN을 사용하여
department_id
를 기준으로 결합하는 예제입니다.
SELECT employees.name, departments.department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.id;
이 쿼리는 employees
테이블의 name과 departments
테이블의
department_name을 반환하며, department_id가 일치하는 행만 결과에 포함됩니다.
결과 예시:
name | department_name |
---|---|
John | Sales |
Jane | HR |
Bob | Engineering |
3. INNER JOIN과 여러 테이블 결합
INNER JOIN을 사용하여 두 개 이상의 테이블을 동시에 결합할 수 있습니다.
3.1 세 개의 테이블 결합
다음은 employees
, departments
, projects
테이블을 결합하여 직원,
부서, 그리고 프로젝트 이름을 함께 조회하는 예제입니다.
SELECT employees.name, departments.department_name, projects.project_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.id
INNER JOIN projects ON employees.project_id = projects.id;
이 쿼리는 세 개의 테이블에서 department_id와 project_id가 일치하는 데이터를 결합하여 반환합니다.
결과 예시:
name | department_name | project_name |
---|---|---|
John | Sales | Alpha |
Jane | HR | Beta |
Bob | Engineering | Gamma |
4. INNER JOIN과 WHERE 절 결합
INNER JOIN과 WHERE 절을 결합하면 결합된 데이터에서 추가 조건을 사용하여 데이터를 필터링할 수 있습니다.
4.1 특정 부서에 속한 직원만 조회
다음은 departments
테이블에서 HR 부서에 속한 직원만 조회하는 예제입니다.
SELECT employees.name, departments.department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.id
WHERE departments.department_name = 'HR';
이 쿼리는 부서 이름이 HR
인 직원만 반환합니다.
결과 예시:
name | department_name |
---|---|
Jane | HR |
5. INNER JOIN과 집계 함수 결합
INNER JOIN을 사용하여 집계 함수를 적용하고, 데이터를 그룹화하여 더 복잡한 분석을 할 수 있습니다.
예제: 부서별 직원 수 조회
다음은 employees
와 departments
테이블을 결합하여 부서별 직원 수를 계산하는 예제입니다.
SELECT departments.department_name, COUNT(employees.id) AS employee_count
FROM employees
INNER JOIN departments ON employees.department_id = departments.id
GROUP BY departments.department_name;
이 쿼리는 각 부서에 속한 직원 수를 반환합니다.
결과 예시:
department_name | employee_count |
---|---|
Sales | 3 |
HR | 2 |
Engineering | 4 |
6. INNER JOIN을 사용할 때의 주의 사항
- 조건: 두 테이블 간에 비교할 공통된 키(외래 키 및 기본 키)를 명확히 지정해야 합니다.
- 데이터 일치: INNER JOIN은 두 테이블에서 공통된 값이 있는 데이터만 반환합니다. 일치하지 않는 데이터는 결과에서 제외됩니다.
- JOIN 성능: 대규모 테이블에서 JOIN을 사용할 때 성능에 영향을 줄 수 있습니다. 필요하지 않은 데이터는 WHERE 절로 필터링하거나, 필요한 열만 조회하여 쿼리를 최적화해야 합니다.
7. 실전 예제
예제 1: 직원과 부서 정보를 결합
SELECT e.name, d.department_name
FROM employees e
INNER JOIN departments d ON e.department_id = d.id;
이 쿼리는 employees 테이블에 e, departments 테이블에 d라는 별칭을 부여하여 결합한 후, name과 department_name을 조회합니다.
예제 2: 프로젝트에 참여한 직원 조회
SELECT e.name, p.project_name
FROM employees e
INNER JOIN projects p ON e.project_id = p.id;
이 쿼리는 직원과 프로젝트 데이터를 결합하여 프로젝트에 참여한 직원을 조회합니다.
예제 3: 부서별로 평균 급여 조회
SELECT d.department_name, AVG(e.salary) AS avg_salary
FROM employees e
INNER JOIN departments d ON e.department_id = d.id
GROUP BY d.department_name;
이 쿼리는 부서별 평균 급여를 계산하여 조회합니다.
8. INNER JOIN vs OUTER JOIN 비교
- INNER JOIN: 두 테이블에서 일치하는 데이터만 반환합니다.
- OUTER JOIN(LEFT, RIGHT, FULL): 일치하지 않는 데이터도 포함하여 반환합니다. LEFT JOIN은 왼쪽 테이블의 모든 행을 반환하고, RIGHT JOIN은 오른쪽 테이블의 모든 행을 반환하며, FULL JOIN은 양쪽 테이블의 모든 행을 반환합니다.
요약
SQL INNER JOIN은 두 테이블 간의 일치하는 데이터를 조회할 때 사용되는 중요한 SQL 연산자입니다. INNER JOIN은 공통된 키를 기준으로 테이블을 결합하여 필요한 정보를 결합하고, 일치하는 데이터만을 반환합니다. 이를 통해 데이터베이스에서 관계된 데이터를 조회하고 분석할 수 있으며, JOIN과 WHERE, GROUP BY와 같은 절을 결합하여 복잡한 쿼리를 작성할 수 있습니다.