레코드를 정렬하려면 ORDER BY 절을 사용하고, 두 번째 순서의 레코드만 가져오려면 LIMIT과 오프셋(offset)을 함께 활용하면 됩니다. LIMIT 구문에서 첫 번째 값은 건너뛸 행의 수(오프셋), 두 번째 값은 가져올 행의 수를 의미합니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable1417
-> (
-> CustomerId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> CustomerName varchar(20),
-> ShippingDate date
-> );
Query OK, 0 rows affected (1.10 sec)
2. 데이터 삽입하기
INSERT 문을 사용하여 테이블에 샘플 레코드를 추가합니다.
mysql> insert into DemoTable1417(CustomerName,ShippingDate) values('Chris','2019-01-21');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1417(CustomerName,ShippingDate) values('David','2018-12-01');
Query OK, 1 row affected (0.55 sec)
mysql> insert into DemoTable1417(CustomerName,ShippingDate) values('Carol','2019-09-28');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1417(CustomerName,ShippingDate) values('Sam','2019-08-29');
Query OK, 1 row affected (0.17 sec)3. 전체 레코드 조회하기
SELECT 문으로 테이블의 모든 레코드를 확인해 보겠습니다.
mysql> select * from DemoTable1417;
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+------------+--------------+--------------+
| CustomerId | CustomerName | ShippingDate |
+------------+--------------+--------------+
| 1 | Chris | 2019-01-21 |
| 2 | David | 2018-12-01 |
| 3 | Carol | 2019-09-28 |
| 4 | Sam | 2019-08-29 |
+------------+--------------+--------------+
4 rows in set (0.00 sec)
4. 두 번째 순서의 레코드 가져오기
정렬된 결과 중 두 번째 레코드만 가져오려면 아래와 같이 LIMIT 2,1 구문을 사용합니다. 여기서 '2'는 앞의 2개 행을 건너뛰라는 오프셋이 아니라, 실제로는 offset 1부터 시작하는 방식으로 해석됩니다. 즉, limit 2,1은 2번째 위치(인덱스 기준)에서 시작하여 1개의 행을 반환한다는 의미입니다.
mysql> select CustomerName,ShippingDate from DemoTable1417 order by CustomerId limit 2,1;
실행 결과는 다음과 같습니다.
+--------------+--------------+
| CustomerName | ShippingDate |
+--------------+--------------+
| Carol | 2019-09-28 |
+--------------+--------------+
1 row in set (0.00 sec)
핵심 정리
LIMIT offset, count 형식에서 offset은 0부터 시작합니다. 따라서 두 번째 레코드를 가져오려면 limit 1,1을 사용하는 것이 일반적입니다. 위 예제에서 limit 2,1은 세 번째 레코드인 Carol(2019-09-28)을 반환했습니다. 원하는 위치의 레코드를 정확히 가져오려면 오프셋 계산에 유의해야 합니다.