대량의 데이터를 다룰 때 전체 결과를 한꺼번에 가져오는 것은 비효율적입니다. MySQL에서는 LIMIT 절을 사용해 한 번에 원하는 개수(N개)의 행만 조회할 수 있습니다. 이 글에서는 LIMIT 절의 기본 문법부터 실전 예제까지 단계별로 살펴보겠습니다.
LIMIT 절 기본 문법
한 번에 N개의 행만 가져오려면 아래와 같이 LIMIT 연산자를 사용합니다.
SELECT * FROM yourTableName LIMIT 0, N;
여기서 첫 번째 숫자는 시작 위치(오프셋), 두 번째 숫자는 가져올 행의 개수를 의미합니다. 즉, LIMIT 0, 10은 첫 번째 행부터 10개의 행을 가져온다는 뜻입니다.
실전 예제로 익히기
1단계: 테이블 생성
먼저 예제에 사용할 테이블을 생성하겠습니다.
mysql> create table DemoTable ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Name varchar(20) ); Query OK, 0 rows affected (0.25 sec)
Id 컬럼은 자동 증가(AUTO_INCREMENT)되는 기본 키이고, Name 컬럼에는 이름이 저장됩니다.
2단계: 샘플 데이터 삽입
insert 명령을 사용해 테이블에 레코드를 추가합니다.
mysql> insert into DemoTable(Name) values('John');
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable(Name) values('Larry');
Query OK, 1 row affected (0.07 sec)
mysql> insert into DemoTable(Name) values('Bob');
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable(Name) values('Sam');
Query OK, 1 row affected (0.07 sec)
mysql> insert into DemoTable(Name) values('Mike');
Query OK, 1 row affected (0.07 sec)
mysql> insert into DemoTable(Name) values('David');
Query OK, 1 row affected (0.06 sec)
mysql> insert into DemoTable(Name) values('Carol');
Query OK, 1 row affected (0.05 sec)
mysql> insert into DemoTable(Name) values('Ramit');
Query OK, 1 row affected (0.06 sec)
mysql> insert into DemoTable(Name) values('Adam');
Query OK, 1 row affected (0.03 sec)
mysql> insert into DemoTable(Name) values('Chris');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(Name) values('Robert');
Query OK, 1 row affected (0.06 sec)
mysql> insert into DemoTable(Name) values('James');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(Name) values('Jace');
Query OK, 1 row affected (0.05 sec)총 13개의 이름 데이터가 삽입되었습니다.
3단계: 전체 데이터 확인
select 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+----+--------+ | Id | Name | +----+--------+ | 1 | John | | 2 | Larry | | 3 | Bob | | 4 | Sam | | 5 | Mike | | 6 | David | | 7 | Carol | | 8 | Ramit | | 9 | Adam | | 10 | Chris | | 11 | Robert | | 12 | James | | 13 | Jace | +----+--------+ 13 rows in set (0.00 sec)
4단계: LIMIT으로 10개의 행만 조회하기
이제 한 번에 N개의 행만 가져오는 쿼리를 실행해 보겠습니다. 여기서는 처음 10개의 행만 조회합니다.
mysql> select *from DemoTable LIMIT 0,10;
실행 결과는 다음과 같습니다.
+----+-------+ | Id | Name | +----+-------+ | 1 | John | | 2 | Larry | | 3 | Bob | | 4 | Sam | | 5 | Mike | | 6 | David | | 7 | Carol | | 8 | Ramit | | 9 | Adam | | 10 | Chris | +----+-------+ 10 rows in set (0.00 sec)
전체 13개의 행 중 앞의 10개만 반환된 것을 확인할 수 있습니다.
OFFSET을 활용한 페이지네이션
LIMIT의 시작 위치 값을 조정하면 간단한 페이지네이션(페이징 처리)을 구현할 수 있습니다.
LIMIT 0, 10→ 1페이지 (1~10번째 행)LIMIT 10, 10→ 2페이지 (11~20번째 행)LIMIT 20, 10→ 3페이지 (21~30번째 행)
예를 들어 나머지 3개의 행을 조회하려면 다음과 같이 작성합니다.
mysql> select *from DemoTable LIMIT 10,10;
정리
MySQL에서 한 번에 N개의 행만 가져오려면 LIMIT 시작위치, 개수 형식의 쿼리를 사용하면 됩니다. 오프셋 값을 변경하면 특정 구간의 데이터만 선택적으로 조회할 수 있어, 게시판 목록이나 무한 스크롤 같은 페이지네이션 기능을 구현할 때 매우 유용합니다.