MySQL에서 테이블의 마지막 10개 행을 조회하려면 서브쿼리와 LIMIT 개념을 함께 사용하면 됩니다. 핵심 아이디어는 먼저 내부 쿼리에서 ORDER BY ... DESC와 LIMIT로 최신 데이터를 가져온 뒤, 외부 쿼리에서 다시 오름차순으로 정렬하는 것입니다.
1. 예제 테이블 생성하기
먼저 실습에 사용할 테이블을 생성합니다.
mysql> create table Last10RecordsDemo
-> (
-> id int,
-> name varchar(100)
-> );
Query OK, 0 rows affected (0.75 sec)2. 레코드 삽입하기
총 12개의 샘플 데이터를 두 번에 나누어 삽입합니다.
mysql> insert into Last10RecordsDemo values(1,'John'),(2,'Carol'),(3,'Bob'),(4,'Sam'),(5,'David'),(6,'Taylor'); Query OK, 6 rows affected (0.12 sec) Records: 6 Duplicates: 0 Warnings: 0 mysql> insert into Last10RecordsDemo values(7,'Sam'),(8,'Justin'),(9,'Ramit'),(10,'Smith'),(11,'Clark'),(12,'Johnson'); Query OK, 6 rows affected (0.14 sec) Records: 6 Duplicates: 0 Warnings: 0
3. 전체 레코드 확인하기
테이블에 저장된 모든 데이터를 조회해 보겠습니다.
mysql> select *from Last10RecordsDemo;
실행 결과는 다음과 같습니다.
+------+---------+ | id | name | +------+---------+ | 1 | John | | 2 | Carol | | 3 | Bob | | 4 | Sam | | 5 | David | | 6 | Taylor | | 7 | Sam | | 8 | Justin | | 9 | Ramit | | 10 | Smith | | 11 | Clark | | 12 | Johnson | +------+---------+ 12 rows in set (0.00 sec)
4. 마지막 10개 행 조회 쿼리 작성하기
테이블에서 마지막 10개 레코드를 가져오는 기본 문법은 다음과 같습니다. 여기서는 LIMIT 절을 활용합니다.
SELECT * FROM ( SELECT * FROM yourTableName ORDER BY id DESC LIMIT 10 )Var1 ORDER BY id ASC;
이 쿼리의 동작 순서는 다음과 같습니다.
- 내부 서브쿼리:
id기준 내림차순(DESC) 정렬 후 상위 10개 행만 추출합니다. 즉, 가장 최근(마지막)에 입력된 10개 레코드가 선택됩니다. - 외부 쿼리: 서브쿼리 결과를 다시
id오름차순(ASC)으로 정렬하여 원래의 입력 순서대로 출력합니다.
5. 실제 쿼리 실행하기
위 문법을 예제 테이블에 적용해 보겠습니다.
mysql> SELECT * FROM (
-> SELECT * FROM Last10RecordsDemo ORDER BY id DESC LIMIT 10
-> )Var1
->
-> ORDER BY id ASC;실행 결과, 마지막 10개 레코드(id 3번부터 12번까지)가 정상적으로 출력됩니다.
+------+---------+ | id | name | +------+---------+ | 3 | Bob | | 4 | Sam | | 5 | David | | 6 | Taylor | | 7 | Sam | | 8 | Justin | | 9 | Ramit | | 10 | Smith | | 11 | Clark | | 12 | Johnson | +------+---------+ 10 rows in set (0.00 sec)
결과 비교
SELECT 문을 통해 전체 레코드와 마지막 10개 레코드를 비교해 보면 차이를 명확히 확인할 수 있습니다.
전체 레코드 (12개)

마지막 10개 레코드 (10개)

정리 및 참고 사항
MySQL에는 SQL Server의 TOP이나 Oracle의 ROWNUM처럼 '뒤에서 N개'를 직접 가져오는 구문이 없기 때문에, 위와 같이 내림차순 정렬 + LIMIT + 재정렬 패턴이 가장 널리 사용되는 방식입니다.
추가로 알아두면 좋은 팁은 다음과 같습니다.
- MySQL 8.0 이상에서는 윈도우 함수를 사용할 수도 있습니다. 예:
SELECT * FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY id DESC) AS rn FROM yourTableName) t WHERE rn <= 10 ORDER BY id; - 정렬 기준 컬럼(
id)에 인덱스가 있다면 대용량 테이블에서도 성능 저하 없이 빠르게 조회할 수 있습니다. - 단순히 순서를 뒤집어서 보는 것으로 충분하다면 외부
ORDER BY를 생략하고 내림차순 결과 그대로 사용해도 무방합니다.