SQL에서 조인은 두 개 이상의 테이블에 있는 데이터를 한 번에 조회하는 기능입니다. 예를 들어, 회사 데이터베이스에서 직원과 그 직원이 속한 부서의 정보를 함께 조회할 때, 두 테이블을 조인하여 필요한 데이터를 가져올 수 있습니다.
조인에는 여러 종류가 있으며, 각 유형은 고유한 방식으로 테이블을 결합합니다.
employee 테이블과 department 테이블이 있다고 가정해 봅시다. 직원 테이블에는 직원의 ID, 이름, 부서 ID가, 부서 테이블에는 부서의 ID와 이름이 저장되어 있습니다.
다음 SQL 쿼리를 통해 부서 ID가 1인 직원이 속한 부서의 이름을 조회할 수 있습니다:
SELECT d.name
FROM employee e, department d
WHERE e.department_id = d.id AND e.id = 1;
이 쿼리는 내부 조인(Implicit Join)을 사용하여 employee 테이블과 department 테이블을 결합한 뒤, 직원 ID가 1인 직원의 부서 이름을 가져옵니다. 하지만 이러한 방식의 조인은 가독성이 떨어지고, 복잡한 쿼리에서 오류를 유발할 수 있습니다.
내부 조인은 두 테이블에서 조건이 일치하는 데이터만 조회하는 조인입니다. 다음과 같은 형식으로 사용됩니다:
SELECT e.name, d.name
FROM employee e
INNER JOIN department d
ON e.department_id = d.id;
이 쿼리는 employee 테이블과 department 테이블을 조인하여, 부서 ID가 일치하는 데이터를 조회합니다.
외부 조인은 조인 조건에 맞지 않는 데이터도 포함하여 조회하는 조인입니다. 외부 조인은 LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN으로 나뉩니다.
LEFT OUTER JOIN은 왼쪽 테이블의 모든 데이터를 포함하여 조회하고, 오른쪽 테이블에서 조건에 맞는 데이터가 없는 경우 NULL로 채웁니다.
SELECT e.name, d.name
FROM employee e
LEFT OUTER JOIN department d
ON e.department_id = d.id;
RIGHT OUTER JOIN은 오른쪽 테이블의 모든 데이터를 포함하여 조회하고, 왼쪽 테이블에서 조건에 맞는 데이터가 없는 경우 NULL로 채웁니다.
SELECT e.name, d.name
FROM employee e
RIGHT OUTER JOIN department d
ON e.department_id = d.id;
FULL OUTER JOIN은 양쪽 테이블의 모든 데이터를 포함하여 조회합니다. 두 테이블에서 조건이 일치하지 않는 경우, 해당 데이터는 NULL로 채워집니다.
SELECT e.name, d.name
FROM employee e
FULL OUTER JOIN department d
ON e.department_id = d.id;
교차 조인은 두 테이블의 모든 조합을 결과로 반환합니다. 즉, 한 테이블의 각 행과 다른 테이블의 모든 행을 결합한 결과를 생성합니다.
SELECT e.name, d.name
FROM employee e
CROSS JOIN department d;
자기 조인은 동일한 테이블을 자신과 조인하는 방법입니다. 이를 통해 같은 테이블 내 두 행 간의 관계를 분석할 수 있습니다.
SELECT e1.name, e2.name
FROM employee e1, employee e2
WHERE e1.manager_id = e2.id;
이퀴 조인은 조인 조건에서 동등 연산자(=)를 사용하는 조인입니다. 대부분의 조인은 이퀴 조인의 형태를 띱니다.
SELECT e.name, d.name
FROM employee e
INNER JOIN department d
ON e.department_id = d.id;
내추럴 조인은 두 테이블에서 동일한 이름을 가진 컬럼들을 자동으로 기준 삼아 조인하는 방법입니다.
SELECT e.name, d.name
FROM employee e
NATURAL JOIN department d;
내추럴 조인은 조인 조건을 명시적으로 작성하지 않아도 되지만, 동일한 이름의 컬럼이 여러 개 있을 경우 의도하지 않은 결과를 초래할 수 있으므로 사용에 주의가 필요합니다.
부서에 속한 모든 직원의 이름과 연봉을 조회하되, 부서 리더는 제외하는 쿼리를 작성할 수 있습니다.
SELECT e.name, e.salary
FROM employee e
INNER JOIN department d
ON e.department_id = d.id
WHERE d.id = 1003 AND e.id != d.leader_id;
특정 프로젝트에 참여한 직원들의 이름, 직책, 소속 부서의 이름을 조회하는 쿼리입니다.
SELECT e.name, e.position, d.name
FROM works_on w
INNER JOIN employee e
ON w.employee_id = e.id
INNER JOIN department d
ON e.department_id = d.id
WHERE w.project_id = 2001;
이번 글에서는 SQL의 다양한 조인 방식과 그 특징들을 상세히 살펴보았습니다. 조인은 관계형 데이터베이스에서 여러 테이블의 데이터를 효과적으로 결합하여 원하는 정보를 조회하는 데 필수적인 기능입니다. 내부 조인, 외부 조인, 교차 조인, 자기 조인 등 각 조인 방식은 고유한 특성과 용도를 가지고 있으며, 이를 적절히 활용하면 복잡한 데이터 관계도 쉽게 다룰 수 있습니다.
각 조인 방식의 동작 원리와 적절한 사용 상황을 깊이 이해하는 것은 SQL을 효과적으로 활용하는 데 있어 핵심적인 스킬입니다. 예를 들어, 내부 조인은 두 테이블 간의 일치하는 데이터만을 가져오는 반면, 외부 조인은 일치하지 않는 데이터도 포함시킬 수 있어 데이터 분석에 유용합니다. 또한, 자기 조인은 같은 테이블 내에서의 관계를 탐색하는 데 효과적이며, 교차 조인은 모든 가능한 조합을 생성하는 데 사용됩니다.
이러한 조인 기법들을 마스터하면, 복잡한 데이터베이스 구조에서도 원하는 정보를 정확하고 효율적으로 추출할 수 있게 됩니다. 따라서 데이터베이스 관리자, 개발자, 데이터 분석가 등 SQL을 다루는 모든 전문가들에게 조인은 필수적인 도구이자 지속적으로 연마해야 할 기술입니다.
https://www.youtube.com/watch?v=aL0XXc1yGPs&list=PLcXyemr8ZeoREWGhhZi5FZs6cvymjIBVe