본문 바로가기

순이코딩/데이터베이스

[데이터베이스] ROWNUM / TOP-N

728x90
반응형

페이징이란 데이터를 조금씩 보여주는 기술을 말합니다. 한꺼번에 많은 양의 데이터가 노출되어 서버가 부담이 가지 않도록 방지하는 기술입니다. 구글에서 검색했을 때 페이지를 끝까지 내리면 1  2  3  4  5 이런 식으로 페이지가 나누어져 있는 걸 볼 수 있는데 이것이 페이징입니다.

이러한 페이징 기술은 ROWNUM과 TOP-N 기술로 구현합니다.

 


 

1. ROWNUM / TOP-N

 

■ ROWNUM

 

ROWNUM은 테이블의 튜플(행)에 임시로 부여되는 일련번호입니다.

 

 WHERE 조건에 ROWNUM을 사용하면 출력되는 튜플(행) 개수 제한 가능합니다.

WHERE ROWNUM <= 3 을 입력하면 위에서 3개 튜플만 출력

 

그런데 여기서 주의해야 할 사항은 1의 값을 먼저 사용해야 2의 값을 사용할 수 있다는 점입니다. 아래의 그림에서 가운데 그림을 보면 1의 값에 접근하지 않고 2에 접근해서 제대로 작동하지 않는것을 볼 수 있습니다.

 

만약 중간부터 출력하고 싶다면 다른 방법을 사용해야합니다.

 

■ 인라인 뷰

 

인라인 뷰라는 기능을 사용하면 가능합니다. 인라인 뷰는 서브쿼리 기술 중 하나로 서브쿼리 중 FROM절에 쿼리를 작성해 가상의 테이블처럼 사용하는 방식입니다. 인라인 뷰를 활용해 ROWNUM이 직원테이블의 쿼리인 것처럼 가공하여 사용하는 것입니다.

 

ROWNUM 개념과 인라인 뷰 개념을 조합해서 상위 N개의 특정데이터만 뽑아낼 수 있는데, 이 기술을 TOP-N 기술이라고 합니다.

 

■ TOP-N

 

위 그림에서는 인라인뷰로 먼저 연봉이 높은 순으로 정렬한 후 ROWNUM을 통해 상위 5명만 출력하고 있습니다. 이렇게 하지 않고 WHERE절에 조건을 주게 되면 불어온 상태에서의 위 5명만 보여준 후 연봉순으로 정렬하게 되기 때문에 위와 다른 결과가 출력됩니다.

최근게시글 순으로 20개의 게시글 출력(1페이지)

만약 1 페이지에 위그림처럼 최근게시글 순으로 출력되었다고 했을 때, 2페이지에는 21번 글부터 40번까지의 글이 출력되어야 합니다. 이런 경우는 인라인 뷰를 두 번 사용하여 구현하여야 합니다.

 

728x90
반응형