back-end/DB

7. 페이징 처리

림가이드 2023. 4. 4. 17:14

: 데이터는 엄청 방대해서 한꺼번에 다 볼 수 없다.

그래서 특정 위치부터 특정개수까지 내려주는 페이징 처리를 살펴보자.

 

- MySQL, MariaDB : limit을 이용하여 페이징 처리

- Oracle : ROWNUM

- MSSQL : OFFSET, FETCH

 

 

ex) member table에서 3번째 행부터 두 개 가져오기

select * from member limit 2, 2;

 

ex) member table을 이름으로 내림차순한 결과 출력. 그리고 이름으로 내림차순하여 각 행이 몇번째 표시하는지까지 출력

select *,
       row_number() over (order by member.name desc) as row_index
from member
order by member.name desc;

 

ex) 위의 결과에서 세번째 행부터 2개의 데이터만 출력

select *,
       row_number() over (order by member.name desc) as row_index
from member
order by member.name desc
limit 2,2;

 

 

실제로 어떤 사이트의 게시글에서 10개 보여주고 다음 페이지로 넘어가 다시 10개 보여주는 그런 기능의 SQL문?

 

ex) 0~1까지 출력

select * from (select *
               from (select *,
                    row_number() over (order by member.name desc) as row_index
                     from member
                     order by member.name desc) t1
               where row_index <= 2) t2
where row_index > 0;

ex) 3~4까지 출력

select * from (select *
               from (select *,
                    row_number() over (order by member.name desc) as row_index
                     from member
                     order by member.name desc) t1
               where row_index <= 4) t2
where row_index > 2;