본문 바로가기
카테고리 없음

관계란 무엇인가? 데이터베이스에서의 관계와 조인의 이해

by moment-love 2025. 1. 24.

 

관계란 무엇인가? 데이터베이스에서의 관계와 조인의 이해

 

데이터베이스는 현대 정보 시스템에서 핵심적인 역할을 담당하며,

효율적인 데이터 관리는 데이터베이스 설계와 쿼리 작성의 기본 원칙을 이해하는 데서 시작됩니다.

특히, 관계조인은 데이터를 논리적으로 연결하고 원하는 정보를 추출하는 데 필수적인 개념입니다.

 

이 글에서는 관계의 정의와 유형을 살펴보고, 계층형 데이터 모델의 예시를 통해 관계를 사용하는 방법을 설명하며,

SQL의 SELECT 쿼리를 작성하는 구조와 순서를 알아보겠습니다.

 


 

관계란 무엇인가?

 

관계의 정의와 분류

 

 

데이터베이스에서 관계란 부모 엔티티의 식별자가 자식 엔티티로 상속되고,
이 상속된 속성을 매핑 키(조인 키)로 활용하는 구조를 뜻합니다.
관계는 크게 두 가지로 분류됩니다.

 

 

  1. 존재 관계 : 부모 엔티티가 존재해야 자식 엔티티가 존재할 수 있는 관계입니다.

  2. 행위 관계 : 특정 조건에 따라 부모와 자식 간의 동작이나 처리가 이루어지는 관계입니다.

 


 

계층형 데이터 모델의 예시

 

계층 구조와 셀프 조인

 

 

 

계층형 데이터 모델은 하나의 엔터티 내에서 인스턴스들이 계층적으로 연결된 구조를 의미합니다.
이 경우 셀프 조인(Self Join)이 자주 사용됩니다.

 

 


예를 들어,

회사 조직도를 나타내는 데이터베이스에서 각 직원의 manager_id가 다른 직원의 employee_id를

참조한다고 가정해 봅시다.

 

SELECT e.employee_id, e.name AS employee_name, m.name AS manager_name
FROM employees e
LEFT JOIN employees m
ON e.manager_id = m.employee_id;

 

 

위 쿼리는 직원과 그들의 관리자 (Manger)를 같은 테이블에서 조인하여 출력합니다.

 

결과 예시

 

employee_id employee_name manager_name
1 John NULL
2 Sarah John
3 Mike Sarah

 

 

 


 

SELECT 절의 구조와 순서

 

SELECT 쿼리 작성 순서

 

 

SQL에서 SELECT 절은 데이터를 추출하는 기본 구조입니다.

실행 순서는 다음과 같습니다.

 

SQL를 해석하기 위해선 꼭 숙지하고 계셔야 합니다.

 

  1. FROM : 데이터를 가져올 테이블을 지정합니다.

  2. WHERE : 조건을 적용하여 데이터를 필터링합니다.

  3. GROUP BY : 데이터를 그룹화합니다.

  4. HAVING : 그룹화된 데이터에 추가 조건을 적용합니다.

  5. SELECT : 최종 출력할 칼럼을 선택합니다.

  6. ORDER BY : 결과를 정렬합니다.

 

테이블 예시

 

employee_id name department salary
1 Alice Sales 8000
2 Bob IT 7000
3 Charlie Sales 10000
4 David IT 8000
5 Eve Sales 12000
7 Grace IT 10000
8 Helen Sales 10000

 

 

SELECT department, SUM(salary) AS total_salary
FROM employees
WHERE salary > 3000
GROUP BY department
HAVING SUM(salary) > 20000
ORDER BY total_salary DESC;

 

 

쿼리 해석

 

 

1. FROM 절 : FROM employees

employees라는 테이블에서 데이터를 가져옵니다.

이 테이블에는 각 직원의 정보(예: 부서, 급여 등)가 포함되어 있다고 가정합니다.

 


 

2. WHERE 절 : WHERE salary > 3000


각 직원의 급여(salary)가 3000보다 큰 행만 필터링합니다.
즉, 급여가 3000 이하인 데이터는 제외됩니다.

 


 

3. GROUP BY 절 : GROUP BY department


department(부서) 별로 데이터를 그룹화합니다.
이 단계에서는 각 부서에 속한 직원들의 데이터를 하나로 묶습니다.

 


 

4. SELECT 절 : SELECT department, SUM(salary) AS total_salary


department(부서)와 해당 부서에 속한 직원들의 salary 합계를 계산하여 출력합니다.
합계(SUM(salary))는 total_salary라는 별칭으로 반환됩니다.

 


 

5. HAVING 절 : HAVING SUM(salary) > 20000


그룹화된 부서 중에서 급여 합계(SUM(salary))가 20000을 초과하는 부서만 선택합니다.
여기서 HAVING 절은 그룹화된 데이터에 조건을 적용하는 데 사용됩니다.

 

(참고: WHERE 절은 개별 행에 조건을 적용하지만, HAVING은 그룹화된 결과에 조건을 적용합니다.)

 


 

6. ORDER BY 절 : ORDER BY total_salary DESC


total_salary(부서별 급여 합계)를 기준으로 내림차순(DESC)으로 정렬합니다.
즉, 급여 합계가 가장 높은 부서가 결과에서 가장 먼저 나타납니다.

 

 


 

결과 예시

 

department total_salary
Sales 40000
IT 25000

 

 

  • Sales 부서의 급여 합계는 40000으로 가장 높으며, 출력 결과의 첫 번째 줄에 표시됩니다.
  • IT 부서의 급여 합계는 25000으로 두 번째로 높습니다.

 

 

 


 

결론 : 효율적인 데이터 설계와 쿼리 작성을 위한 데이터베이스 관계와 조인 개념 숙지

 

데이터베이스 설계에서 관계와 조인의 개념은 단순히 데이터를 저장하는 것을 넘어 효율적으로 활용하는 데 중요한 역할을 합니다.

관계를 이해하면 데이터 간의 연결성과 의존성을 명확히 파악할 수 있으며,

조인을 활용하면 복잡하게 얽힌 데이터에서도 필요한 정보를 빠르게 추출할 수 있습니다.

 

특히, 계층형 데이터 모델과 셀프 조인을 효과적으로 사용하면 조직도와 같은 복잡한 계층 구조를 간단하게 관리할 수 있습니다.

또한, SELECT 절의 구조를 체계적으로 이해하면 데이터를 필터링, 그룹화, 정렬하는 과정을 쉽게 구현할 수 있습니다.

 

 

 

 

반응형