728x90
반응형

 

Microsoft SQL Server에서 계층적 데이터를 쿼리하기 위해 "Connect by"와 유사한 방법은 CTE(Common Table Expression)와 재귀 쿼리(Recursive Query)를 사용하는 것입니다. CTE 및 재귀 쿼리를 사용하면 계층적 데이터를 다루는데 효과적입니다. 아래에 간단한 예제를 제시하겠습니다.

먼저, 다음과 같은 예제 데이터를 사용하겠습니다.

CREATE TABLE Employees

(

EmployeeID INT PRIMARY KEY,

EmployeeName NVARCHAR(50),

ManagerID INT

);

INSERT INTO Employees (EmployeeID, EmployeeName, ManagerID)

VALUES (1, 'John', NULL),

(2, 'Alice', 1),

(3, 'Bob', 1),

(4, 'Charlie', 2),

(5, 'David', 2),

(6, 'Eve', 3);

이제 CTE와 재귀 쿼리를 사용하여 계층적 데이터를 쿼리하는 방법을 보여드리겠습니다.

-- 재귀 CTE를 사용하여 계층적 데이터를 쿼리합니다.

WITH EmployeeHierarchy AS

(

SELECT EmployeeID, EmployeeName, ManagerID, 0 AS Level

FROM Employees

WHERE ManagerID IS NULL

UNION ALL

SELECT e.EmployeeID, e.EmployeeName, e.ManagerID, eh.Level + 1

FROM Employees e

INNER JOIN EmployeeHierarchy eh ON e.ManagerID = eh.EmployeeID

)

SELECT EmployeeID, EmployeeName, ManagerID, Level

FROM EmployeeHierarchy

ORDER BY Level, EmployeeID;

위의 쿼리는 계층적 데이터를 계층 수준(Level)에 따라 정렬하여 출력합니다. 재귀 CTE를 사용하면 계층 구조를 탐색하면서 데이터를 가져올 수 있습니다.

이 코드에서:

첫 번째 부분은 루트 노드(ManagerID가 NULL)의 데이터를 선택합니다.

두 번째 부분은 재귀적으로 EmployeeHierarchy CTE와 Employees 테이블을 조인하여 계층 구조를 탐색합니다.

최종 결과는 계층 수준(Level)에 따라 정렬된 계층적 데이터를 반환합니다.

이것이 SQL Server에서 "Connect by"와 유사한 방법으로 계층적 데이터를 쿼리하는 방법입니다. 계층 구조가 있는 데이터를 다룰 때 매우 유용한 기술입니다.

728x90
반응형

'DB' 카테고리의 다른 글

유용한 DBEAVER 단축키 모음  (1) 2024.04.29
[DBeaver] SQL실행 단축기 변경  (2) 2023.12.31

+ Recent posts