1. 모조칼럼 rownum
rownum은 #4-3에서 간단한 개념을 알아보았었다.
https://ddcloud.tistory.com/84
이번에는 이 rownum으로 페이징(Paging)을 하는 방법에 대해서 알아보려한다.
2. Paging
페이징이란 한 페이지에 들어올 데이터의 수를 조건으로 나누어서 가져오는 것을 말한다.
댓글을 한 번 생각해보자.
한 기사에 댓글이 2,354개가 달렸다고 쳐본다면.
이 기사에 들어오는 모든 사용자들에게 한번에 2,354개의 댓글 데이터를 준다면 서버의 부하가 너무 심해진다.
그렇기에 페이지에 할당하기로 계획한, 출력할 만큼의 데이터를 나눠서 처리하게 하는 것을 페이징이라 하고 이 페이징을 효율적이게 처리하기 위해선 인덱스(목차)가 필요하다.
이것을 위해 rownum을 사용하는 것이다.
우선 데이터에 rownum을 붙여보자.
-- 줄번호
select hakno, uname, rownum from tb_student;
-- 줄번호에 별칭 부여하기
select hakno, uname, rownum as rnum from tb_student;
-- 줄번호가 먼저 부여되고 정렬된다
select hakno, uname, rownum as rnum from tb_student order by uname;
-- 줄번호 1~3 사이 조회
select hakno, uname, rownum from tb_student where rownum>=1 and rownum<=3;
-- 줄번호 4~6 사이 조회
select hakno, uname, rownum from tb_student where rownum>=4 and rownum<=6; -- 안됌
#4-3에서 언급했듯 rownum은 무언가로 정렬을 하면 이미 붙여진 상태로 함께 정렬이 된다.
그리고 페이징을 위해 where절로 줄번호 1~3을 조회하는 것은 가능하지만 4~6을 조회하는 것은 불가능하다.
왜일까?
이것은 이유가 있다.
where 조건절로 rownum을 4~6사이로 지정해주더라도 rownum은 where절을 만족하는 레코드에 순번을 붙이게 된다.
그래서 1~3, 즉 첫 숫번을 1로 지정한 조건은 rownum의 성질을 만족을 하기에 출력을 하지만 4~6 사이로 지정하게 되면 3줄이 출력이 되기에 1~3으로 rownum이 붙고, 그래서 4~6의 rownum값은 존재하지 않기에 오류는 나지 않지만 출력도 되지 않는 것이다.
그러기 위해 rownum으로 페이징을 하기 위해 조건절에 사용하기 위해선 rownum은 모조칼럼이므로 조건절에 직접 사용하지 말고, 실제 칼럼으로 인식한 후 사용해야 한다.
이제 rownum 칼럼은 셀프조인 후에 줄번호를 추가하고 조건절에 활용해보자.
문) 줄번호(rownum을 이용해서 줄번호 4~6 조회
--1) 이름 순으로 조회 (줄번호까지 같이 정렬)
select uname, hakno, address, rownum
from tb_student
order by uname;
--2) 1)의 결과를 AA 테이블로 만들어서 줄번호 붙이기
select uname, hakno, address, rownum as rnum
from (
select uname, hakno, address
from tb_student
order by uname
) AA;
--3) 2)의 결과를 BB테이블로 만들고, 줄번호 4~6행을 조회하시오
select uname, hakno, address, rnum
from (
select uname, hakno, address, rownum as rnum
from (
select uname, hakno, address
from tb_student
order by uname
) AA
) BB
where rnum>=4 and rnum<=6;
이런 방식으로 페이징이 가능하다.
'⁂ Oracle DB > : 기본 익히기' 카테고리의 다른 글
[Oracle] #6-2 계정 생성하기(dbf 파일 만들기, grant) (0) | 2022.08.30 |
---|---|
[Oracle] #6-1 SQL Developer로 CSV파일 가져오기 (0) | 2022.08.29 |
[Oracle] #5-2 조인(Join) (0) | 2022.08.26 |
[Oracle] #5-1 모델링(테이블 시나리오, 테이블 정의서) 개념 정리 (0) | 2022.08.25 |
[Oracle] #4-4 오라클과 마리아DB의 자료형 (0) | 2022.08.23 |