2-3단원 - 계층적 메서드를 사용하여 계층적 테이블 쿼리Lesson 2-3 - Querying a Hierarchical Table Using Hierarchy Methods

이제 HumanResources.EmployeeOrg 테이블을 완전히 채웠으므로 이 태스크에서는 일부 계층 메서드를 사용하여 계층을 쿼리하는 방법을 보여 줍니다.Now that the HumanResources.EmployeeOrg table is fully populated, this task will show you how to query the hierarchy using some of the hierarchical methods.

부하 직원 노드를 찾으려면To find subordinate nodes

  1. Sariya에게는 부하 직원이 한 명 있습니다.Sariya has one subordinate employee. Sariya의 부하 직원에 대해 쿼리하려면 IsDescendantOf 메서드를 사용하는 다음 쿼리를 실행합니다.To query for Sariya's subordinates, execute the following query that uses the IsDescendantOf method:

    DECLARE @CurrentEmployee hierarchyid  
    
    SELECT @CurrentEmployee = OrgNode  
    FROM HumanResources.EmployeeOrg  
    WHERE EmployeeID = 46 ;  
    
    SELECT *  
    FROM HumanResources.EmployeeOrg  
    WHERE OrgNode.IsDescendantOf(@CurrentEmployee ) = 1 ;  
    

    결과에 Sariya와 Wanida가 모두 나열됩니다.The result lists both Sariya and Wanida. Sariya는 0 수준에서 하위 항목이므로 나열됩니다.Sariya is listed because she is the descendant at the 0 level. Wanida는 1 수준에서 하위 항목입니다.Wanida is the descendant at the 1 level.

  2. GetAncestor 메서드를 사용하여 이 정보에 대해 쿼리할 수도 있습니다.You can also query for this information by using the GetAncestor method. GetAncestor 는 반환하려는 수준에 대한 인수를 사용합니다.GetAncestor takes an argument for the level that you are trying to return. Wanida는 Sariya보다 한 수준 아래이므로 다음 코드와 같이 GetAncestor(1) 를 사용합니다.Since Wanida is one level underneath Sariya, use GetAncestor(1) as demonstrated in the following code:

    DECLARE @CurrentEmployee hierarchyid  
    
    SELECT @CurrentEmployee = OrgNode  
    FROM HumanResources.EmployeeOrg  
    WHERE EmployeeID = 46 ;  
    
    SELECT OrgNode.ToString() AS Text_OrgNode, *  
    FROM HumanResources.EmployeeOrg  
    WHERE OrgNode.GetAncestor(1) = @CurrentEmployee  
    

    이번에는 결과에 Wanida만 나열됩니다.This time the result lists only Wanida.

  3. 이제 @CurrentEmployee 를 David(EmployeeID 6)로 변경하고 수준을 2로 변경합니다.Now change the @CurrentEmployee to David (EmployeeID 6) and the level to 2. 다음을 실행하여 Wanida도 반환합니다.Execute the following to also return Wanida:

    DECLARE @CurrentEmployee hierarchyid  
    
    SELECT @CurrentEmployee = OrgNode  
    FROM HumanResources.EmployeeOrg  
    WHERE EmployeeID = 6 ;  
    
    SELECT OrgNode.ToString() AS Text_OrgNode, *  
    FROM HumanResources.EmployeeOrg  
    WHERE OrgNode.GetAncestor(2) = @CurrentEmployee  
    

    이번에는 David에게 보고하는 두 수준 아래에 있는 Mary도 반환됩니다.This time, you also receive Mary who also reports to David, two levels down.

GetRoot 및 GetLevel을 사용하려면To use GetRoot, and GetLevel

  1. 계층이 커질수록 계층에서의 멤버 위치를 확인하기가 더 어려워집니다.As the hierarchy grows larger it is more difficult to determine where the members are in the hierarchy. GetLevel 메서드를 사용하여 계층에서의 각 행 수준을 알 수 있습니다.Use the GetLevel method to find how many levels down each row is in the hierarchy. 다음 코드를 실행하여 모든 행의 수준을 확인합니다.Execute the following code to view the levels of all the rows:

    SELECT OrgNode.ToString() AS Text_OrgNode,   
    OrgNode.GetLevel() AS EmpLevel, *  
    FROM HumanResources.EmployeeOrg ;  
    GO  
    
  2. GetRoot 메서드를 사용하여 계층의 루트 노드를 확인할 수 있습니다.Use the GetRoot method to find the root node in the hierarchy. 다음 코드에서는 루트인 단일 행을 반환합니다.The following code returns the single row which is the root:

    SELECT OrgNode.ToString() AS Text_OrgNode, *  
    FROM HumanResources.EmployeeOrg  
    WHERE OrgNode = hierarchyid::GetRoot() ;  
    GO  
    

다음 태스크에서는 계층을 다시 구성합니다.The next task will reorganize the hierarchy.

단원의 다음 태스크Next Task in Lesson

계층 메서드를 사용하여 계층적 테이블의 데이터 다시 정렬Reordering Data in a Hierarchical Table Using Hierarchical Methods