코딩 스쿨 SQL

언어선택 : HTMLCSSJAVAJAVASCRIPTMYSQLSQL PHP

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 테이블의 namedepartments 테이블의 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_idproject_id가 일치하는 데이터를 결합하여 반환합니다.

결과 예시:

name department_name project_name
John Sales Alpha
Jane HR Beta
Bob Engineering Gamma

4. INNER JOIN과 WHERE 절 결합

INNER JOINWHERE 절을 결합하면 결합된 데이터에서 추가 조건을 사용하여 데이터를 필터링할 수 있습니다.

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을 사용하여 집계 함수를 적용하고, 데이터를 그룹화하여 더 복잡한 분석을 할 수 있습니다.

예제: 부서별 직원 수 조회

다음은 employeesdepartments 테이블을 결합하여 부서별 직원 수를 계산하는 예제입니다.

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라는 별칭을 부여하여 결합한 후, namedepartment_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은 공통된 키를 기준으로 테이블을 결합하여 필요한 정보를 결합하고, 일치하는 데이터만을 반환합니다. 이를 통해 데이터베이스에서 관계된 데이터를 조회하고 분석할 수 있으며, JOINWHERE, GROUP BY와 같은 절을 결합하여 복잡한 쿼리를 작성할 수 있습니다.


copyright ⓒ 스타트코딩 all rights reserved.
이메일 : startcodingim@gamil.com