MySQL에서 테이블의 마지막 30개 행을 가져오려면 ORDER BY ... DESC로 내림차순 정렬한 뒤 LIMIT 30을 사용하면 됩니다. 기본 문법은 다음과 같습니다.
SELECT * FROM yourTableName ORDER BY yourColumnName DESC LIMIT 30;
1. 예제 테이블 생성
먼저 실습용 테이블을 생성해 보겠습니다.
mysql> CREATE TABLE DemoTable1567
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY
-> );
Query OK, 0 rows affected (0.82 sec)2. 샘플 데이터 삽입
INSERT 명령으로 여러 개의 레코드를 한 번에 추가합니다.
mysql> INSERT INTO DemoTable1567 VALUES(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(); Query OK, 37 rows affected (0.37 sec) Records: 37 Duplicates: 0 Warnings: 0
이렇게 하면 자동 증가(AUTO_INCREMENT)에 의해 Id가 1부터 37까지 총 37개의 행이 생성됩니다.
3. 전체 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> SELECT * FROM DemoTable1567;
실행 결과는 다음과 같습니다.
+----+ | Id | +----+ | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | | 10 | | 11 | | 12 | | 13 | | 14 | | 15 | | 16 | | 17 | | 18 | | 19 | | 20 | | 21 | | 22 | | 23 | | 24 | | 25 | | 26 | | 27 | | 28 | | 29 | | 30 | | 31 | | 32 | | 33 | | 34 | | 35 | | 36 | | 37 | +----+ 37 rows in set (0.00 sec)
4. 마지막 30개 행 조회 쿼리
이제 핵심인 마지막 30개 행을 가져오는 쿼리입니다. Id를 내림차순(DESC)으로 정렬하고 상위 30개만 제한하면, 결과적으로 가장 최근(마지막)에 입력된 30개 행이 반환됩니다.
mysql> SELECT * FROM DemoTable1567 ORDER BY Id DESC LIMIT 30;
실행 결과는 다음과 같습니다.
+----+ | Id | +----+ | 37 | | 36 | | 35 | | 34 | | 33 | | 32 | | 31 | | 30 | | 29 | | 28 | | 27 | | 26 | | 25 | | 24 | | 23 | | 22 | | 21 | | 20 | | 19 | | 18 | | 17 | | 16 | | 15 | | 14 | | 13 | | 12 | | 11 | | 10 | | 9 | | 8 | +----+ 30 rows in set (0.00 sec)
정리 및 추가 팁
ORDER BY 컬럼명 DESC LIMIT 30 조합은 MySQL에서 마지막 N개 행을 가져오는 가장 일반적이고 효율적인 방법입니다. 몇 가지 참고할 점은 다음과 같습니다.
- 정렬 기준 컬럼 선택: AUTO_INCREMENT 기본키뿐 아니라 날짜·시간 컬럼(예:
created_at)을 기준으로 정렬하면 최신 데이터 순으로 조회할 수 있습니다. - 결과를 오름차순으로 되돌리기: 내림차순 결과를 다시 오름차순으로 보고 싶다면 서브쿼리를 활용하세요.
SELECT * FROM (SELECT * FROM 테이블명 ORDER BY Id DESC LIMIT 30) AS t ORDER BY Id ASC; - 성능 최적화: 정렬 기준이 되는 컬럼에 인덱스가 있다면 대용량 테이블에서도 빠른 조회가 가능합니다.