개요
MySQL 테이블에서 정렬된 상태로 특정 개수의 행만 가져오고 싶다면 ORDER BY 절과 LIMIT 절을 함께 사용하면 됩니다. ORDER BY는 결과를 특정 컬럼 기준으로 정렬하고, LIMIT은 반환되는 행의 수를 제한하는 역할을 합니다.
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable1551
-> (
-> EmployeeId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> EmployeeName varchar(20)
-> );
Query OK, 0 rows affected (0.52 sec)
데이터 삽입하기
insert 명령을 사용하여 테이블에 여러 개의 레코드를 삽입합니다.
mysql> insert into DemoTable1551(EmployeeName) values('Chris');
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable1551(EmployeeName) values('Robert');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1551(EmployeeName) values('Mike');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1551(EmployeeName) values('Sam');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1551(EmployeeName) values('David');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable1551(EmployeeName) values('Adam');
Query OK, 1 row affected (0.11 sec)전체 데이터 조회하기
select 문을 사용하여 테이블의 모든 레코드를 확인해 보겠습니다.
mysql> select * from DemoTable1551;
위 쿼리는 다음과 같은 결과를 출력합니다.
+------------+--------------+
| EmployeeId | EmployeeName |
+------------+--------------+
| 1 | Chris |
| 2 | Robert |
| 3 | Mike |
| 4 | Sam |
| 5 | David |
| 6 | Adam |
+------------+--------------+
6 rows in set (0.00 sec)
정렬된 3개의 행만 선택하는 쿼리
다음은 MySQL 테이블에서 내림차순으로 정렬된 3개의 행만 선택하는 쿼리입니다.
mysql> select * from DemoTable1551
-> order by EmployeeId desc limit 0,3;
실행 결과는 다음과 같습니다.
+------------+--------------+
| EmployeeId | EmployeeName |
+------------+--------------+
| 6 | Adam |
| 5 | David |
| 4 | Sam |
+------------+--------------+
3 rows in set (0.00 sec)
쿼리 동작 원리
order by EmployeeId desc는 EmployeeId 컬럼을 기준으로 내림차순(descending) 정렬을 수행합니다. 이어서 limit 0,3은 오프셋 0(첫 번째 행)부터 시작하여 3개의 행만 반환하도록 지정합니다.
그 결과 가장 나중에 입력된 직원 3명인 Adam, David, Sam이 ID가 큰 순서대로 조회됩니다. 만약 오름차순으로 상위 3개 행을 가져오고 싶다면 desc를 제거하고 order by EmployeeId asc limit 0,3처럼 작성하면 됩니다.