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 절을 반드시 추가하는 것이 좋습니다.