결과 행 제한하기 - LIMIT

유석현(SeokHyun Yu)·2022년 8월 8일
0

SQL

목록 보기
11/45
post-thumbnail

서론

인터넷 쇼핑몰에서 물건을 구매하거나 커뮤니티 사이트의 게시판을 읽다 보면, 수많은 상품과 게시물을 전부 하나의 페이지에 표시하는 대신 몇 건씩 나누어 표시하는 것을 알 수 있다.

이런 경우에 LIMIT 구를 사용해 표시할 행 수를 제한할 수 있다.


1. 행수 제한

LIMIT 구는 표준 SQL은 아니다.

MySQLPostgreSQL에서만 사용할 수 있는 문법이라는 점에 주의하자.

SQL Server에서는 LIMIT과 비슷한 기능을 하는 'TOP'을 사용하며, Oracle에서는 ROWNUM이라는 열을 사용해 WHERE 구로 조건을 지정하여 행을 제한한다.

LIMIT 구는 SELECT 명령의 마지막에 지정하는 것으로 WHERE 구나 ORDER BY 구의 뒤에 지정한다.

LIMIT 다음에는 최대 행수수치로 지정한다.

만약 LIMIT 10으로 지정하면 최대 10개의 행이 반환된다.

SELECT * FROM sample_table LIMIT 3;

위와 같이 실행할 경우 3개의 행이 반환된다.


2. 오프셋 지정

웹 시스템에서는 클라이언트의 브라우저를 통해 페이지 단위로 화면에 표시할 내용을 처리한다.

대량의 데이터를 하나의 페이지에 표시하는 것은 기능적으로도 속도 측면에서도 효율적이지 못하므로 일반적으로 페이지 나누기(pagination) 기능을 사용한다.

커뮤니티 사이트 등에서 게시판 하단 부분에 '1, 2, 3, 4, 5, 다음'처럼 표시된 것이 그 예이다.

이 페이지 나누기 기능은 LIMIT을 사용해 간단히 구현할 수 있다.

한 페이지당 5건의 데이터를 표시하도록 한다면 첫 번째 페이지의 경우 LIMIT 5로 결괏값을 표시하면 될 것이다.

그 다음 페이지에서는 6번째 행부터 5건의 데이터를 표시하도록 한다.

이때 '6번째 행부터'라는 표현은 취득할 데이터의 시작위치를 가리키는 것으로, LIMIT 구에 OFFSET으로 지정할 수 있다.

SELECT * FROM sample_table LIMIT 5 OFFSET 0;

SELECT * FROM sample_table LIMIT 5 OFFSET 5;

SELECT * FROM sample_table LIMIT 5 OFFSET 10;

...

페이지네이션은 위와 같이 OFFSET의 숫자만 계속 바뀌면서 SQL 명령이 실행되는 것이다.

주의할 점은 OFFSET에 지정하는 위치가 0부터 시작한다는 것이다.

따라서 출력하고 싶은 행의 시작위치를 '1번째 행부터'라고 하면 OFFSET에 0을, '6번째 행부터'라고 하면 OFFSET에 5를 지정해주면 된다.

컴퓨터 자료구조 중에 배열을 떠올리면 이해하기 쉽다.

profile
Backend Engineer

0개의 댓글