Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 범위 내 특정 행을 선택하는 방법 (LIMIT & OFFSET)

개요

MySQL에서 대량의 데이터 중 원하는 범위의 행만 골라 조회해야 하는 경우가 자주 있습니다. 이럴 때 ORDER BY, LIMIT, OFFSET 절을 조합하면 손쉽게 해결할 수 있습니다. 이번 글에서는 실제 예제를 통해 특정 범위의 행을 선택하는 방법을 단계별로 살펴보겠습니다.

1단계: 테이블 생성

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table DemoTable
   (
   Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   StudentName varchar(20)
   );
Query OK, 0 rows affected (1.23 sec)

2단계: 레코드 삽입

INSERT 명령을 사용해 테이블에 학생 데이터를 입력합니다.

mysql> insert into DemoTable(StudentName) values('John');
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable(StudentName) values('Carol');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable(StudentName) values('David');
Query OK, 1 row affected (0.07 sec)
mysql> insert into DemoTable(StudentName) values('Bob');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable(StudentName) values('Chris');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable(StudentName) values('Robert');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(StudentName) values('Adam');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(StudentName) values('Mike');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable(StudentName) values('Sam');
Query OK, 1 row affected (0.16 sec)

3단계: 전체 레코드 확인

SELECT 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable;

출력 결과

+----+-------------+
| Id | StudentName |
+----+-------------+
| 1  | John        |
| 2  | Carol       |
| 3  | David       |
| 4  | Bob         |
| 5  | Chris       |
| 6  | Robert      |
| 7  | Adam        |
| 8  | Mike        |
| 9  | Sam         |
+----+-------------+
9 rows in set (0.00 sec)

4단계: 특정 범위의 행 선택하기

이제 본론입니다. 아래 쿼리처럼 ORDER BY로 정렬 기준을 잡고, LIMITOFFSET을 조합하면 원하는 위치의 행만 가져올 수 있습니다.

mysql> select *from DemoTable ORDER BY Id DESC LIMIT 4 OFFSET 2;

출력 결과

+----+-------------+
| Id | StudentName |
+----+-------------+
| 7  | Adam        |
| 6  | Robert      |
| 5  | Chris       |
| 4  | Bob         |
+----+-------------+
4 rows in set (0.00 sec)

쿼리 동작 원리

각 절이 어떤 역할을 하는지 자세히 살펴보겠습니다.

  • ORDER BY Id DESC: Id 컬럼을 기준으로 내림차순(큰 값부터) 정렬합니다. 따라서 순서는 9, 8, 7, 6, 5, 4, 3, 2, 1이 됩니다.
  • OFFSET 2: 정렬된 결과에서 앞의 2개 행(Id 9, 8)을 건너뜁니다.
  • LIMIT 4: 건너뛴 후 남은 결과 중 최대 4개의 행만 반환합니다.

그 결과 Id가 7, 6, 5, 4인 네 개의 행이 출력되었습니다. 이처럼 LIMIT과 OFFSET을 활용하면 게시판 페이징 처리나 특정 구간 데이터 추출 등 다양한 상황에서 유용하게 사용할 수 있습니다.