[sql] 뷰의 계층 구조와 계층형 쿼리
관계형 데이터베이스에서 뷰(view)는 하나 이상의 기본 테이블에서 가져온 데이터를 기반으로 생성된 가상의 테이블이다. 또한, 뷰는 다른 뷰나 기본 테이블과 동일하게 쿼리할 수 있다.
데이터베이스에서 계층 구조를 가지는 데이터를 다루는 경우가 많은데, 이때 뷰를 활용하여 계층형 데이터를 관리할 수 있다. 뷰는 상위 레벨 계층에 해당하는 데이터를 하위 레벨 계층과 조인하여 사용할 수 있으므로, 데이터를 계층 구조로 다룰 수 있게 한다.
더불어, 계층형 구조를 가지는 데이터를 다룰 때 유용한 계층형 쿼리(hierarchical query)를 사용하여 뷰를 계층 구조로 다룰 수 있다. 계층형 쿼리는 데이터의 상위와 하위 관계를 쉽게 파악할 수 있도록 도와준다.
아래는 PostgreSQL에서 WITH RECURSIVE를 사용하여 계층형 쿼리를 통해 조직도를 조회하는 간단한 예제이다.
WITH RECURSIVE org_chart AS (
SELECT emp_id, emp_name, manager_id
FROM employee
WHERE manager_id IS NULL
UNION ALL
SELECT e.emp_id, e.emp_name, e.manager_id
FROM employee e
JOIN org_chart c ON e.manager_id = c.emp_id
)
SELECT * FROM org_chart;
이 예제에서는 employee 테이블을 활용하여 사원과 상사의 관계를 가진 조직도를 조회하고 있다.
뷰의 계층 구조와 계층형 쿼리를 활용하여 데이터베이스에서 계층 구조를 가지는 데이터를 손쉽게 다룰 수 있으며, 이를 통해 더 효율적인 데이터 관리가 가능해진다.
참고 자료
- PostgreSQL 공식 문서: https://www.postgresql.org/docs/current/queries-with.html
- Oracle Database 공식 문서: https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/SELECT.html#GUID-DF546A0E-3B5A-44D6-971A-8EF593506C40