SQL/Top-N 쿼리

[SQL]Top-N 쿼리_ROWNUM

한기리 2020. 12. 2. 19:54
728x90
320x100

Top-N 쿼리

Top-N 쿼리는 말 그대로 상위(Top) N개의 행을 조회하는 쿼리이다.

기본 문법

  • 오라클 데이터베이스는 ROWNUM 방식, 분석함수 방식, ROW LIMITNING 절 세 가지 방식의 Top-N쿼리를 사용할 수 있다.

15.1.1 ROWNUM 방식

 

ROWNUM 방식은 오라클 데이터베이스 전통적인 Top-N쿼리 방식이다. ORDER BY 절로 행을 정렬하고, 정렬된 행을 ROWNUM 슈도 칼럼으로 제한한다.

 

 

ex 1 )

SELECT empno, sal, ROWNUM AS rn
  FROM emp;

 

 ROWNUM 슈도 칼럼< 조건이나 <= 조건을 사용해야한다.

 

 

ex 2 )

SELECT empno, sal, ROWNUM AS rn
  FROM emp
 WHERE ROWNUM <= 2;

 

- emp 테이블에서 ROWNUM가 2 이하의 조건을 갖는 empno, sal, rn의 행을 출력한다.

 

ex 3 ) 

 

SELECT empno, sal, ROWNUM AS rn
  FROM emp
 WHERE ROWNUM <= 5
ORDER BY sal;

- WHERE절에서 ROWNUM 5개 이하 조건을 충족한 후 마지막에 ORDER BY 절에서 sal 순으로 정렬하면서 다음과 같은 결과가 출력이 된다. (SQL 실행순서를 알면 이해가 편하다.)

 

ex 4 ) 페이징 처리

VAR v_pr NUMBER; -- v_pr 한 페이지당 행의 개수
EXEC :v_pr := 5;
VAR v_pn NUMBER; -- v_pn 페이지 위치
EXEC :v_pn := 2;

SELECT empno, sal, rn
  FROM (SELECT empno, sal, ROWNUM AS rn
          FROM (SELECT empno, sal FROM emp ORDER BY sal, empno)
         WHERE ROWNUM <= :v_pr * :v_pn)
 WHERE rn >= (:v_pr * (:v_pn -1)) + 1;

한 페이지당 행의 개수( v_pr )와 페이지 위치( v_pn)를 가지고 페이징을 할 수 있다.

- 한 페이지당 행의 개수 = 5, 페이지 위치 = 2 일 때 2번째 페이지에 6, 7, 8, 9, 10 행이 출력되는 개념이다.

728x90
320x100