MySQL에서 쿼리 결과 중 처음 10개의 레코드를 건너뛰고 싶다면 LIMIT 절과 OFFSET 키워드를 함께 사용하면 됩니다. 이 기능은 페이지네이션(pagination)을 구현하거나 특정 범위의 데이터만 조회할 때 매우 유용합니다.
기본 문법
처음 10개의 결과를 건너뛰려면 아래와 같이 'limit offset' 구문을 사용합니다.
SELECT * FROM yourTableName LIMIT 10 OFFSET lastValue;
여기서 lastValue 자리에 건너뛰고 싶은 레코드 수를 지정하면, 해당 개수만큼의 행을 제외한 나머지 결과가 반환됩니다.
예제 테이블 생성하기
실습을 위해 먼저 샘플 테이블을 생성해 보겠습니다. 다음은 테이블을 만드는 쿼리입니다.
mysql> create table SkipFirstTenRecords
-> (
-> StudentId int,
-> StudentName varchar(200)
-> );
Query OK, 0 rows affected (0.53 sec)레코드 삽입하기
이제 INSERT 명령어를 사용하여 테이블에 학생 데이터를 입력합니다.
mysql> insert into SkipFirstTenRecords values(100,'John'); Query OK, 1 row affected (0.12 sec) mysql> insert into SkipFirstTenRecords values(101,'Johnson'); Query OK, 1 row affected (0.14 sec) mysql> insert into SkipFirstTenRecords values(102,'Carol'); Query OK, 1 row affected (0.10 sec) mysql> insert into SkipFirstTenRecords values(103,'Smith'); Query OK, 1 row affected (0.32 sec) mysql> insert into SkipFirstTenRecords values(104,'Bob'); Query OK, 1 row affected (0.14 sec) mysql> insert into SkipFirstTenRecords values(105,'David'); Query OK, 1 row affected (0.18 sec) mysql> insert into SkipFirstTenRecords values(106,'Sam'); Query OK, 1 row affected (0.14 sec) mysql> insert into SkipFirstTenRecords values(107,'Taylor'); Query OK, 1 row affected (0.23 sec) mysql> insert into SkipFirstTenRecords values(108,'Ramit'); Query OK, 1 row affected (0.16 sec) mysql> insert into SkipFirstTenRecords values(109,'Belly'); Query OK, 1 row affected (0.18 sec) mysql> insert into SkipFirstTenRecords values(110,'Aaron'); Query OK, 1 row affected (0.16 sec) mysql> insert into SkipFirstTenRecords values(111,'Peter'); Query OK, 1 row affected (0.10 sec) mysql> insert into SkipFirstTenRecords values(112,'Travis'); Query OK, 1 row affected (0.14 sec) mysql> insert into SkipFirstTenRecords values(113,'Alex'); Query OK, 1 row affected (0.18 sec) mysql> insert into SkipFirstTenRecords values(114,'Pat'); Query OK, 1 row affected (0.11 sec)
테이블에 저장된 전체 레코드를 확인해 보겠습니다.
mysql> select *from SkipFirstTenRecords;
실행 결과는 다음과 같습니다. 총 15개의 레코드가 조회됩니다.
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 100 | John | | 101 | Johnson | | 102 | Carol | | 103 | Smith | | 104 | Bob | | 105 | David | | 106 | Sam | | 107 | Taylor | | 108 | Ramit | | 109 | Belly | | 110 | Aaron | | 111 | Peter | | 112 | Travis | | 113 | Alex | | 114 | Pat | +-----------+-------------+ 15 rows in set (0.00 sec)
처음 10개 레코드 건너뛰기
이제 위 테이블에서 처음 10개의 레코드를 건너뛰는 쿼리를 실행해 보겠습니다.
mysql> select *from SkipFirstTenRecords limit 10 offset 10;
실행 결과는 다음과 같습니다. 앞의 10개 레코드(100~109번)가 제외되고, 마지막 5개 레코드만 출력된 것을 확인할 수 있습니다.
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 110 | Aaron | | 111 | Peter | | 112 | Travis | | 113 | Alex | | 114 | Pat | +-----------+-------------+ 5 rows in set (0.00 sec)
추가 팁: OFFSET 생략형 문법
MySQL에서는 OFFSET 키워드를 생략하고 콤마(,)로 대체할 수도 있습니다. 즉, LIMIT 5 OFFSET 10은 LIMIT 10, 5와 동일하게 동작합니다. 단, 콤마 형식을 사용할 때는 첫 번째 숫자가 오프셋(건너뛸 행 수), 두 번째 숫자가 반환할 행 수라는 점에 주의해야 합니다.