MySQL 쿼리 결과에서 n번째 레코드를 가져오려면 LIMIT 절을 사용하면 됩니다. LIMIT은 오프셋(offset)과 반환할 행 수를 지정하여 원하는 위치의 레코드만 손쉽게 추출할 수 있게 해주는 강력한 기능입니다.
기본 문법
select * from yourTableName order by yourColumnName limit n,1;
여기서 limit n,1의 의미는 다음과 같습니다.
- n: 건너뛸 레코드 수(오프셋). 즉, 앞에서부터 n개의 행을 제외합니다.
- 1: 오프셋 이후 반환할 레코드 수. 여기서는 딱 한 개의 행만 가져옵니다.
예를 들어 limit 5,1이라면 6번째 레코드가 반환됩니다. 즉, n번째 레코드를 얻으려면 오프셋 값으로 n-1이 아닌 n을 지정해야 한다는 점에 유의하세요.
예제 테이블 생성
위 문법을 실제로 이해하기 위해 예제 테이블을 만들어 보겠습니다. 다음 쿼리로 테이블을 생성합니다.
mysql> create table NthRecordDemo -> ( -> Id int, -> Name varchar(200) -> ); Query OK, 0 rows affected (0.92 sec)
이어서 아래 쿼리로 샘플 데이터를 삽입합니다.
mysql> insert into NthRecordDemo values(100,'John'); Query OK, 1 row affected (0.09 sec) mysql> insert into NthRecordDemo values(101,'Bob'); Query OK, 1 row affected (0.14 sec) mysql> insert into NthRecordDemo values(102,'Carol'); Query OK, 1 row affected (0.22 sec) mysql> insert into NthRecordDemo values(103,'Smith'); Query OK, 1 row affected (0.18 sec) mysql> insert into NthRecordDemo values(104,'Johnson'); Query OK, 1 row affected (0.16 sec) mysql> insert into NthRecordDemo values(105,'Sam'); Query OK, 1 row affected (0.16 sec) mysql> insert into NthRecordDemo values(106,'David'); Query OK, 1 row affected (0.13 sec)
전체 레코드 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from NthRecordDemo;
실행 결과는 다음과 같습니다.
+------+---------+ | Id | Name | +------+---------+ | 100 | John | | 101 | Bob | | 102 | Carol | | 103 | Smith | | 104 | Johnson | | 105 | Sam | | 106 | David | +------+---------+ 7 rows in set (0.00 sec)
n번째 레코드 조회하기
이제 LIMIT 절을 사용해 테이블에서 n번째 레코드를 가져오는 쿼리를 실행해 보겠습니다. 아래 예제는 Id 기준으로 정렬했을 때 7번째(오프셋 6) 레코드를 조회합니다.
mysql> select *from NthRecordDemo order by Id limit 6,1;
실행 결과는 다음과 같습니다.
+------+-------+ | Id | Name | +------+-------+ | 106 | David | +------+-------+ 1 row in set (0.00 sec)
이처럼 order by로 정렬 순서를 명확히 지정하고 limit n,1을 적용하면, 원하는 위치의 레코드를 정확하게 조회할 수 있습니다. 참고로 ORDER BY 절을 생략하면 MySQL이 반환하는 행의 순서가 보장되지 않으므로, n번째 레코드 조회 시에는 반드시 정렬 조건을 함께 사용하는 것이 좋습니다.