TOP N QUERY
- 페이징 처리를 효과적으로 수행하기 위해 사용
- 전체 결과에서 특정 N개 추출
예) 성적 상위자 3명
TOP-N 행 추출 방법
- ROWNUM
- RANK
- FETCH
- 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 : 순환이 발생하면 무한 루프가 될 수 있기 때문에 이를 방지하고자 사용
※ 계층형 질의 가상 컬럼
- LEVEL : 각 DEPTH를 표현 (시작점부터 1)
- CONNECT_BY_ISLEAF : LEAF NODE(최하위 노드) 여부(참 : 1, 거짓 : 0)
※ 계층형 질의 가상 함수
- CONNECT_BY_ROOT 컬럼명 : 루트 노드의 해당하는 컬럼값
- SYS_CONNECT_BY_PATH(컬럼, 구분자) : 이어지는 경로 출력
- ORDER SIBLINGS BY 컬럼 : 같은 LEVEL일 경우 정렬 수행
- CONNECT_BY_ISCYCLE : 계층형 쿼리의 결과에서 순환이 발생했는지 여부
'SQL' 카테고리의 다른 글
SQLD - SQL 활용 (PIVOT 절과 UNPIVOT 절, 정규 표현식) (2) | 2024.11.16 |
---|---|
SQLD - SQL 활용 (윈도우 함수) (1) | 2024.11.16 |
SQLD - SQL 활용 (집합 연산자, 그룹 함수) (2) | 2024.11.16 |
SQLD - SQL 활용(서브 쿼리) (3) | 2024.11.16 |
SQLD - 데이터 모델과 SQL(모델이 표현하는 트랜잭션의 이해, Null 속성의 이해, 본질 식별자 VS 인조 식별자) (3) | 2024.11.15 |