많은 데이터베이스 시스템에서는 계층 구조(Hierarchical Structure)를 표현하기 위한 데이터를 저장할 수 있는 기능을 제공합니다. 이러한 계층 구조는 트리(Tree)와 비슷한 형태로 데이터를 구성하며, 예를 들어 조직도, 제품 카테고리 등에 활용될 수 있습니다.
이 글에서는 데이터베이스에서 계층 구조 검색을 위해 사용되는 일반적인 SQL 쿼리들을 연습해보겠습니다. 이 연습을 위해서, 조직 구조를 표현하는 Employees 테이블을 사용하겠습니다. 이 테이블은 다음과 같은 칼럼들을 가지고 있을 것입니다:
- employee_id: 직원의 고유 ID
- name: 직원의 이름
- manager_id: 직원의 상사의 ID
모든 하위 직원 검색
특정 직원의 모든 하위 직원을 검색하기 위해서는 recursive join
과 depth first search
의 개념을 활용할 수 있습니다. 다음은 모든 하위 직원을 검색하기 위한 SQL 쿼리의 예제입니다:
WITH RECURSIVE Subordinates AS (
SELECT employee_id, name
FROM Employees
WHERE employee_id = {직원 ID}
UNION ALL
SELECT e.employee_id, e.name
FROM Employees e
JOIN Subordinates s ON s.employee_id = e.manager_id
)
SELECT employee_id, name
FROM Subordinates;
위 쿼리에서, Employees
테이블에서 최상위 직원을 선택하고, UNION ALL
을 사용하여 하위 직원을 반복적으로 연결합니다. WITH RECURSIVE
를 사용하면 재귀적인 쿼리를 실행할 수 있습니다. 결과적으로, 특정 직원의 모든 하위 직원을 검색할 수 있습니다.
트리 구조로 검색
데이터베이스에서 저장된 계층 구조를 트리 형태로 검색하기 위해서는 CONNECT BY
구문을 사용할 수 있습니다. 다음은 트리 구조로 검색하는 SQL 쿼리의 예제입니다:
SELECT employee_id, name
FROM Employees
START WITH employee_id = {직원 ID}
CONNECT BY PRIOR employee_id = manager_id;
위 쿼리에서는 START WITH
절을 사용하여 최상위 직원을 선택하고, CONNECT BY
절을 사용하여 계층 구조를 구성합니다. PRIOR
키워드를 사용하여 부모-자식 관계를 표현합니다. 결과적으로, 특정 직원을 포함한 하위 직원들의 트리 구조를 검색할 수 있습니다.
마치며
이 연습을 통해 데이터베이스에서의 계층 구조 검색을 위한 SQL 쿼리들을 학습했습니다. 계층 구조를 가진 데이터를 효율적으로 검색하고 다루는 것은 많은 애플리케이션에서 필요한 기능입니다. 이러한 SQL 쿼리를 활용하여 계층 구조를 다룰 수 있게 되었다면, 데이터베이스 시스템을 더욱 효과적으로 활용할 수 있을 것입니다.
참고자료
#데이터베이스 #SQL