본문 바로가기
IT 프로그래밍 관련/MySQL

MySQL limit 와 offset

by 지나는행인 2021. 3. 16.
728x90

예를 들어 1000행의 데이터가 있다 해도 우리는 그것을 클라이언트에 한번에 다 보내지 않는다.

 

일반적으로 20~25개 정도의 데이터를 제한적으로 보낸다 .   

 

이 작업을 도와주는 것이 limit 이다.

 

limit는 데이터를 제한적으로 나눌 수 있도록 한다.

 

books 테이블을 먼저 보면,

 

 

19개의 데이터로 이루어져 있다. 이것을 5개를 제한하여 나눠보겠다.

1
2
select *               
from books limit 5;
cs

 

 

위는,  books테이블에서 첫 행부터 다섯개의 행까지 모든 컬럼 데이터를 가져오겠다는 뜻이다.

 

 

실행시 화면으로, 첫 행부터 다섯개의 행까지 가져왔다.

 

이 데이터를 클라이언트에게 넘겼다고 가정할때 , 중복되지 않게 그 이후 데이터는 어떻게 넘길까.

1
2
select *                      -- 그 다음부터 5개
from books limit 55;
cs

 

 

위와 같이 코드를 작성하는데 , books테이블에서 여섯번째 행부터 5개를 가져오라는 뜻이다.

여기서 행을 셀때는 0번부터 세기 때문에, 첫째행이 0부터가 된다.

그래서  limit 5,5 가 여섯번째 행부터 5개의 행이다.

limit 5, 5에서  첫번째 5는 offset이라 부른다.

** 위와 데이터가 겹치지 않는걸 볼 수 있다.

 

 

 

그리고 또 다시 중복되지 않게 데이터 5개를 보낸다고 하면

1
2
select *           -- 그 다음부터 또 5개
from books limit 105;
cs

 

 

이런식으로 offset을 10으로 쓰고, 5개의 데이터를 가져온다.

offset 10은 11번째 데이터이다.

** 위와 데이터가 겹치지 않는다.

 

대부분의 데이터는 정렬이 된 상태에서 작업이 이루어진다.

정렬하고 limit 을 이용하자면 코드는

1
2
3
select *
from books
order by released_year desc limit 5;
cs

이렇게 쓴다.

 

먼저 released_year 컬럼을 내림차순으로 정렬한 뒤 그 데이터를 처음부터 5개만 제한적으로 한다.

 

실행 시를 보면

 

 

** 정렬상태에서 상위 다섯개의 데이터

released_year가 정렬되고 데이터가 5개만 제한적으로 조회되는 것을 확인 할 수 있다.

 

이 후의 데이터를 5개씩 보낸다고 가정하면,   앞서 위에서 했던 것과 마찬가지로 offset을 조정하면 된다.

 

select *

from books

order by released_year desc limit 5,5 ;           offset 5부터,    5개의 데이터

 

select *

from books

order by released_year desc limit10,5;          offset 10부터,   5개의 데이터

댓글