Computer >> 컴퓨터 >  >> 프로그래밍 >> SQL

SQL INNER JOIN 완벽 가이드: 개념부터 실전 예제까지

SQL INNER JOIN은 두 테이블에서 지정된 열의 값이 서로 일치하는 행만 반환하는 조인 방식입니다. 하나 또는 여러 개의 열을 기준으로 테이블을 결합할 수 있으며, JOIN 문은 두 데이터베이스 테이블을 연결하고 내용을 비교하는 역할을 합니다.

왜 조인이 필요한가?

데이터베이스 작업을 하다 보면 두 개 이상의 테이블에 나눠 저장된 데이터를 동시에 조회해 하나의 결과로 합쳐야 하는 경우가 자주 있습니다.

예를 들어, 제품 목록과 함께 해당 제품을 공급한 공급업체의 이름을 함께 가져오고 싶다고 가정해 봅시다. 제품 이름은 한 테이블에, 공급업체 이름은 다른 테이블에 저장되어 있기 때문에 두 테이블을 연결해야 원하는 데이터를 얻을 수 있습니다.

바로 이럴 때 SQL 조인(JOIN)이 사용됩니다. 조인 조건을 활용하면 여러 테이블에 흩어져 있는 정보를 하나의 결과 집합으로 결합할 수 있습니다. 그중 INNER JOIN은 두 테이블에서 일치하는 열 값을 가진 레코드만 반환하는 가장 기본적인 조인 방식입니다. 이 글에서는 INNER JOIN의 개념과 사용법을 예제와 함께 자세히 살펴보겠습니다.

SQL INNER JOIN의 기본 문법

INNER JOIN은 두 테이블 모두에 존재하는, 즉 일치하는 열 값을 가진 모든 레코드를 조회합니다. INNER JOIN 문은 ON 키워드를 사용해 두 테이블 간의 데이터를 매칭합니다.

INNER JOIN은 SQL에서 가장 널리 사용되는 조인 유형으로, 양쪽 테이블 모두에 일치하는 데이터가 있는 레코드만 결과로 반환합니다.

INNER JOIN의 기본 문법은 다음과 같습니다:

SELECT name
FROM customers
INNER JOIN plans
ON customers.plan_id = plans.id;

이 쿼리는 "customers" 테이블과 "plans" 테이블의 행을 결합합니다. customers 테이블의 plan_id 값이 plans 테이블의 어떤 id와 일치하는 고객 목록을 반환합니다.

테이블을 조인할 때는 INNER JOIN 절을 사용하며, ON 키워드는 조인할 테이블 이름 뒤에 위치합니다. 필요하다면 ON 키워드 뒤에 여러 조건을 쉼표로 구분해 지정할 수도 있습니다.

INNER JOIN 실전 예제

직원 정보를 관리하는 데이터베이스가 있다고 가정해 보겠습니다. employees 테이블에는 각 직원의 부서 ID(department_id)가 저장되어 있고, 부서 이름은 별도의 company_departments 테이블에 저장되어 있습니다.

다음은 employees 테이블입니다:

employees
nametitledepartment_id
LukeSales Associate1
MikeSales Associate1
HannahSales Associate1
GeoffSenior Sales Associate1
AlexisSales Associate1
JonahVice President of Sales3
EmmaMarketing Director2

(7 rows)

다음은 company_departments(부서) 테이블입니다:

company_departments
department_idname
1sales
2marketing
3executive

(3 rows)

이제 모든 직원의 이름, 직책, 그리고 소속 부서 이름을 함께 조회하고 싶다고 해보겠습니다. 직원의 이름과 직책은 employees 테이블에, 부서 이름은 company_departments 테이블에 각각 저장되어 있어 두 테이블을 결합해야 합니다.

그렇다면 어떻게 원하는 정보를 얻을 수 있을까요?

employees 테이블에는 department_id라는 열이 있으며, 이 열에는 각 직원이 속한 부서의 ID가 저장되어 있습니다. company_departments 테이블의 각 부서 역시 고유한 ID(해당 테이블의 기본 키)를 가지고 있습니다. 따라서 직원의 department_id와 부서 테이블의 ID를 매칭하면 해당 직원이 속한 부서의 이름을 알아낼 수 있습니다.

직원의 이름, 직책, 소속 부서 이름을 조회하는 쿼리를 작성해 보겠습니다:

SELECT Employees.Name, Employees.Title, Company_Departments.Name
FROM Employees
INNER JOIN Company_Departments
ON Employees.Department_ID = Company_Departments.Department_ID;

이 쿼리는 다음과 같은 결과를 반환합니다:

nametitlename
AlexisSales AssociateSales
GeoffSenior Sales AssociateSales
HannahSales AssociateSales
MikeSales AssociateSales
LukeSales AssociateSales
EmmaMarketing DirectorMarketing
JonahVice President of SalesExecutive

첫 번째 줄에서는 employees 테이블에서 직원의 이름(name)과 직책(title)을, company_departments 테이블에서 부서 이름(name)을 가져오도록 지정합니다.

두 번째 줄에서는 직원 정보를 employees 테이블에서 가져온다고 명시합니다. 이어서 INNER JOIN을 사용해 employees 테이블과 부서 이름이 담긴 company_departments 테이블을 연결합니다.

마지막 줄에서는 두 테이블의 공통 필드인 department_id를 기준으로 employees 테이블과 company_departments 테이블을 연결합니다.

마무리

SQL INNER JOIN은 두 테이블에서 일치하는 열 값을 가진 레코드를 조회하는 구문입니다. ON 절을 사용하면 조인이 실행될 조건을 직접 지정할 수 있습니다.

조인을 능숙하게 다루는 것은 SQL 데이터베이스를 효과적으로 조회하기 위한 핵심 역량입니다. 이 개념을 확실히 이해하면 SQL 전문가에게 한 걸음 더 다가설 수 있습니다.

체계적으로 SQL을 익히고 싶다면, 추천 학습 자료와 강의 목록, 그리고 효율적인 SQL 학습 방법을 정리한 가이드를 참고해 보시기 바랍니다.