Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL LIMIT으로 테이블의 첫 번째 행과 마지막 행 레코드 조회하기

MySQL에서 LIMIT 절을 활용하면 테이블의 첫 번째 행과 마지막 행 데이터를 손쉽게 조회할 수 있습니다. 핵심 아이디어는 두 개의 SELECT 문을 UNION으로 결합하는 것입니다. 하나는 첫 번째 행을 가져오고, 다른 하나는 오프셋(offset)을 이용해 마지막 행을 가져옵니다.

1. 예제 테이블 생성

먼저 실습에 사용할 테이블을 생성합니다. 직원 ID, 이름, 나이를 저장하는 테이블입니다.

mysql> create table FirstAndLastDataDemo
    -> (
    -> EmployeeId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> EmployeeName varchar(20),
    -> EmployeeAge int
    -> );
Query OK, 0 rows affected (0.59 sec)

2. 샘플 데이터 삽입

INSERT 명령어를 사용해 여러 개의 레코드를 입력합니다.

mysql> insert into FirstAndLastDataDemo(EmployeeName,EmployeeAge) values('John',23);
Query OK, 1 row affected (0.15 sec)
mysql> insert into FirstAndLastDataDemo(EmployeeName,EmployeeAge) values('Bob',13);
Query OK, 1 row affected (0.11 sec)
mysql> insert into FirstAndLastDataDemo(EmployeeName,EmployeeAge) values('Larry',24);
Query OK, 1 row affected (0.14 sec)
mysql> insert into FirstAndLastDataDemo(EmployeeName,EmployeeAge) values('Sam',14);
Query OK, 1 row affected (0.18 sec)
mysql> insert into FirstAndLastDataDemo(EmployeeName,EmployeeAge) values('Mike',31);
Query OK, 1 row affected (0.10 sec)
mysql> insert into FirstAndLastDataDemo(EmployeeName,EmployeeAge) values('James',18);
Query OK, 1 row affected (0.16 sec)
mysql> insert into FirstAndLastDataDemo(EmployeeName,EmployeeAge) values('Maxwell',28);
Query OK, 1 row affected (0.17 sec)
mysql> insert into FirstAndLastDataDemo(EmployeeName,EmployeeAge) values('David',27);
Query OK, 1 row affected (0.12 sec)
mysql> insert into FirstAndLastDataDemo(EmployeeName,EmployeeAge) values('Chris',22);
Query OK, 1 row affected (0.19 sec)

3. 전체 레코드 확인

SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select *from FirstAndLastDataDemo;

실행 결과는 다음과 같습니다. 총 9개의 행이 존재합니다.

+------------+--------------+-------------+
| EmployeeId | EmployeeName | EmployeeAge |
+------------+--------------+-------------+
| 1          | John         | 23          |
| 2          | Bob          | 13          |
| 3          | Larry        | 24          |
| 4          | Sam          | 14          |
| 5          | Mike         | 31          |
| 6          | James        | 18          |
| 7          | Maxwell      | 28          |
| 8          | David        | 27          |
| 9          | Chris        | 22          |
+------------+--------------+-------------+
9 rows in set (0.00 sec)

4. LIMIT과 UNION으로 첫 번째·마지막 행 조회

첫 번째 행은 LIMIT 1로 가져오고, 마지막 행은 LIMIT 8,1처럼 오프셋을 지정하여 가져옵니다. 여기서 8은 건너뛸 행의 수(즉, 9번째 행부터 시작)를 의미하고, 1은 반환할 행의 수입니다. 두 결과를 UNION으로 합치면 첫 번째 행과 마지막 행만 출력됩니다.

mysql> (SELECT *from FirstAndLastDataDemo LIMIT 1)
    -> UNION
    -> (SELECT *from FirstAndLastDataDemo LIMIT 8,1);

실행 결과, 첫 번째 행(John)과 마지막 행(Chris)이 정상적으로 함께 조회되었습니다.

+------------+--------------+-------------+
| EmployeeId | EmployeeName | EmployeeAge |
+------------+--------------+-------------+
| 1          | John         | 23          |
| 9          | Chris        | 22          |
+------------+--------------+-------------+
2 rows in set (0.00 sec)

참고 사항

위 예제에서 마지막 행의 오프셋 값(8)은 전체 행 수가 9개임을 알고 있기 때문에 고정된 값입니다. 실무에서는 행 수가 계속 변하므로, 먼저 SELECT COUNT(*)로 총 행 수를 구한 뒤 오프셋을 '전체 행 수 - 1'로 동적으로 설정하거나, ORDER BY와 서브쿼리를 조합하는 방식을 사용하는 것이 안전합니다. 또한 특정 기준(예: EmployeeId 순서)으로 첫/마지막 행을 보장하려면 각 SELECT 문에 ORDER BY 절을 반드시 추가하는 것이 좋습니다.