MySQL에서 테이블의 마지막 5개 레코드를 ID 순서대로 오름차순으로 정렬해서 가져오고 싶다면 서브쿼리(subquery)를 활용하면 됩니다. 핵심 아이디어는 먼저 ID를 내림차순(DESC)으로 정렬해 최근 5개 행을 추출한 뒤, 그 결과를 다시 오름차순(ASC)으로 정렬하는 것입니다.
1. 예제 테이블 생성하기
먼저 실습에 사용할 간단한 테이블을 만들어 보겠습니다.
mysql> create table DemoTable
(
Id int
);
Query OK, 0 rows affected (0.68 sec)2. 샘플 데이터 삽입하기
INSERT 명령을 사용해 여러 개의 레코드를 입력합니다.
mysql> insert into DemoTable values(100); Query OK, 1 row affected (0.16 sec) mysql> insert into DemoTable values(115); Query OK, 1 row affected (0.32 sec) mysql> insert into DemoTable values(200); Query OK, 1 row affected (0.28 sec) mysql> insert into DemoTable values(140); Query OK, 1 row affected (0.16 sec) mysql> insert into DemoTable values(124); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable values(198); Query OK, 1 row affected (0.24 sec) mysql> insert into DemoTable values(156); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable values(178); Query OK, 1 row affected (0.23 sec) mysql> insert into DemoTable values(156); Query OK, 1 row affected (0.43 sec)
3. 전체 레코드 확인하기
SELECT 문으로 테이블에 저장된 모든 데이터를 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+------+ | Id | +------+ | 100 | | 115 | | 200 | | 140 | | 124 | | 198 | | 156 | | 178 | | 156 | +------+ 9 rows in set (0.00 sec)
총 9개의 레코드가 저장되어 있으며, 이 중에서 ID가 가장 큰 값들을 기준으로 마지막 5개를 추출해야 합니다.
4. 서브쿼리로 마지막 5개 레코드 조회하기
아래 쿼리는 내부 서브쿼리에서 ORDER BY Id DESC LIMIT 5로 가장 큰 ID 5개를 먼저 선택하고, 외부 쿼리에서 다시 ORDER BY Id로 오름차순 정렬하는 구조입니다.
mysql> select *from(select *from DemoTable order by Id DESC limit 5)tbl order by Id;
실행 결과는 다음과 같습니다.
+------+ | Id | +------+ | 156 | | 156 | | 178 | | 198 | | 200 | +------+ 5 rows in set (0.00 sec)
동작 원리 정리
- 내부 서브쿼리:
ORDER BY Id DESC LIMIT 5를 통해 ID가 가장 큰 5개 레코드(156, 156, 178, 198, 200)를 추출합니다. - 외부 쿼리: 추출된 결과에 별칭(alias)
tbl을 붙인 뒤,ORDER BY Id로 다시 오름차순 정렬합니다.
이처럼 서브쿼리를 두 단계로 나누면, 전체 데이터를 내림차순으로 보여주는 대신 마지막 N개 레코드만 자연스러운 오름차순 순서로 깔끔하게 출력할 수 있습니다. 게시판의 최근 글 목록처럼 최신 데이터 몇 건을 순서대로 보여줘야 하는 경우에 유용하게 활용할 수 있는 패턴입니다.