>  기사  >  데이터 베이스  >  Oracle에서 하위 노드를 쿼리하는 방법

Oracle에서 하위 노드를 쿼리하는 방법

PHPz
PHPz원래의
2023-04-18 09:07:171623검색

Oracle 데이터베이스에서 노드의 하위 노드를 쿼리하는 것은 특히 대규모 계층적 데이터를 처리할 때 일반적인 요구 사항입니다. 이번 글에서는 Oracle의 CONNECT BY 문과 SYS_CONNECT_BY_PATH 함수를 사용하여 자식 노드를 쿼리하는 방법을 소개하겠습니다.

먼저 CONNECT BY 문을 살펴보겠습니다. CONNECT BY 문은 트리 구조나 계층적 데이터를 쿼리할 수 있는 Oracle의 재귀 쿼리 문입니다. CONNECT BY를 사용하는 방법에는 두 가지가 있습니다. 하나는 START WITH 절을 사용하여 쿼리의 시작 노드를 지정하는 것이고, 다른 하나는 START WITH를 생략하는 것입니다. 이 경우 전체 테이블에서 재귀 쿼리가 수행됩니다.

아래에는 이 쿼리 방법을 설명하는 간단한 예가 나와 있습니다. 직원 정보가 포함된 "EMPLOYEE"라는 테이블이 있다고 가정합니다. 직원이 속한 부서를 나타내는 "DEPT_ID" 필드와 직원의 고유 ID를 나타내는 "EMP_ID" 필드가 있습니다.

다음 문을 통해 "DEPT_ID"가 100인 모든 직원을 쿼리할 수 있습니다.

SELECT * FROM EMPLOYEE START WITH DEPT_ID = 100 CONNECT BY PRIOR EMP_ID = MANAGER_ID;

이 쿼리 문은 "DEPT_ID"가 100인 직원부터 시작하여 하위 직원을 반복적으로 쿼리한다는 의미입니다. 여기서 "PRIOR"는 키워드입니다. 는 상위 재귀의 직원을 나타내며, "MANAGER_ID"는 필드로, 해당 직원의 상위 관리자 ID를 나타냅니다.

쿼리 결과에서는 "DEPT_ID"가 100인 모든 직원과 그 하위 직원의 정보를 확인할 수 있습니다.

단, 이 방법은 직원별 레벨 정보, 즉 직원별 레벨 정보를 제공하지 않습니다. 이때 각 노드의 전체 경로를 얻으려면 SYS_CONNECT_BY_PATH 함수를 사용해야 합니다.

예:

SELECT EMPLOYEE.*, LEVEL, SYS_CONNECT_BY_PATH(EMP_ID, '/') AS PATH
FROM EMPLOYEE
START WITH DEPT_ID = 100
CONNECT BY PRIOR EMP_ID = MANAGER_ID;

쿼리 결과에서 "/100/101/103"과 같은 각 직원의 전체 경로 정보를 볼 수 있습니다. 여기서 "/"는 경로 구분자이고, "LEVEL"은 현재 노드의 레이어 레벨을 나타내는 시스템 변수이다.

또한 다른 방법을 사용하여 하위 노드를 쿼리할 수도 있습니다. 예를 들어, "WITH" 키워드를 사용하여 공개 표현식을 생성하고 이를 쿼리에 사용할 수 있습니다. 이 방법을 사용하면 더 읽기 쉽고 쿼리 조건을 더 쉽게 결합할 수 있습니다.

간단히 말하면 Oracle 데이터베이스에 있는 노드의 하위 노드를 쿼리하려면 CONNECT BY 문과 SYS_CONNECT_BY_PATH 함수를 사용할 수 있습니다. 실제 응용 프로그램에서는 더 나은 결과를 얻기 위해 특정 요구 사항에 따라 다양한 쿼리 방법을 선택할 수 있습니다.

위 내용은 Oracle에서 하위 노드를 쿼리하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.