SQL

SQLD - SQL 활용 (Top N 쿼리, 계층형 질의)

taey 2024. 11. 16. 02:50

TOP N QUERY

  • 페이징 처리를 효과적으로 수행하기 위해 사용
  • 전체 결과에서 특정 N개 추출
    예) 성적 상위자 3명

TOP-N 행 추출 방법

  1. ROWNUM
  2. RANK
  3. FETCH
  4. TOP N(SQL Server)

 

ROWNUM

  • 출력된 데이터 기준으로 행 번호 부여
  • 절대적인 행 번호가 아닌 가상의 번호이므로 특정 행을 지정할 수 없음(= 연산 불가)
  • 첫 번째 행이 증가한 이후 할당되므로 '>' 연산 사용 불가(0은 가능)
  • EQUAL 비교 시 작다(<)와 함께 사용하면 1부터 순서대로 뽑을 수 있기 떄문에 출력 가능함
  • 정렬 순서에 따라 출력되는 ROWNUM이 달라짐

 

FETCH 절

  • 출력될 행의 수를 제한하는 절
  • ORACLE 12C 이상부터 제공(이전 버전에는 ROWNUM 주로 사용)
  • SQL-Server 사용 가능
  • ORDER BY 절 뒤에 사용 (내부 파싱 순서도 ORDER BY 뒤)
  • 문법
    • OFFSET : 건너뛸 행의 수
    • N : 출력할 행의 수
    • FETCH : OFFSET을 쓰지 않았을 때, 처음부터 N 행 출력 명령
    • NEXT : OFFSET을 사용했을 경우, 제외한 행 다음부터 N행 출력 명령
    • ROW | ROWS : 행의 수에 따라 하나일 경우 단수, 여러 값이면 복수형 (특별히 구분하지 않아도 됨)

 

TOP N 쿼리

  • SQL Server에서의 상위 n개 행 추출 문법
  • 서브쿼리 사용 없이 하나의 쿼리로 정렬된 순서대로 상위 n개 추출 가능
  • WITH TIES를 사용하여 동순위까지 함꼐 출력 가능

 


계층형 질의

  • 하나의 테이블 내 각 행끼리 관계를 가질 때, 연결고리르 통해 행과 행 사이의 계층을 표현하는 기법
  • PRIOR의 위치에 따라 데이터가 달라짐
  • 문법
    • START WITH : 데이터를 출력할 시작 지정하는 조건
    • CONNECTION BY PRIOR : 행을 이어나갈 조건
    • NOCYCLE : 순환이 발생하면 무한 루프가 될 수 있기 때문에 이를 방지하고자 사용

 

※ 계층형 질의 가상 컬럼

  1. LEVEL : 각 DEPTH를 표현 (시작점부터 1)
  2. CONNECT_BY_ISLEAF : LEAF NODE(최하위 노드) 여부(참 : 1, 거짓 : 0)

※ 계층형 질의 가상 함수

  1. CONNECT_BY_ROOT 컬럼명 : 루트 노드의 해당하는 컬럼값
  2. SYS_CONNECT_BY_PATH(컬럼, 구분자) : 이어지는 경로 출력
  3. ORDER SIBLINGS BY 컬럼 : 같은 LEVEL일 경우 정렬 수행
  4. CONNECT_BY_ISCYCLE : 계층형 쿼리의 결과에서 순환이 발생했는지 여부