해당 기능은 오라클 12c 버전부터 사용가능하고
그 이전버전의 경우는 ROWNUM을 이용해서 사용해야한다.
1. FETCH FIRST ROW 개념
기능 설명
FETCH FIRST ROW는 쿼리 결과에서 첫 번째 행(또는 지정된 수의 행)만을 반환하도록 제한하는 SQL 키워드.
대량의 데이터 중에서 필요한 첫 번째 행만을 쉽게 가져올 수 있다.
사용 시기
1) 성능 최적화가 필요할 때
2) 대량의 데이터 중 특정 조건을 만족하는 첫 번째 행만 필요할 때
3) 페이징 처리의 일부로 특정 페이지의 데이터를 가져올 때
동작 원리
FETCH FIRST ROW는 쿼리의 결과 집합에서 지정된 수의 행을 반환.
기본적으로 ORDER BY 절과 함께 사용되어 쿼리 결과를 정렬한 후, 첫 번째 행을 선택한다.
관련 키워드
1) OFFSET : 결과 집합의 시작 지점을 지정
2) ROWNUM : 오라클의 내장 함수로, 결과 집합의 각 행에 고유한 번호를 매긴다.
3) TOP : SQL Server에서 사용되는 유사한 기능.
2. FETCH FIRST ROW 구문설명
기본 구문
SELECT * FROM 테이블명 ORDER BY 열명 FETCH FIRST ROW ONLY; |
지정된 열을 기준으로 정렬된 결과 집합에서 첫 번째 행만을 반환
OFFSET과 함께 사용하기
SELECT * FROM 테이블명 ORDER BY 열명 OFFSET 5 ROWS FETCH FIRST 1 ROW ONLY; |
결과 집합의 여섯 번째 행부터 시작하여 첫 번째 행만을 반환
WITH TIES 옵션
SELECT * FROM 테이블명 ORDER BY 열명 FETCH FIRST 1 ROW WITH TIES; |
첫 번째 행과 동일한 값을 가진 모든 행을 반환
예외 처리
FETCH FIRST ROW를 사용할 때 발생할 수 있는 예외 사항은 적지만, 예를 들어 ORDER BY 절이 없는 경우 결과가 예측 불가능할 수 있다.
3. FETCH FIRST ROW 사용예제
단순 쿼리 예제
SELECT * FROM employees ORDER BY hire_date FETCH FIRST ROW ONLY; |
고용일을 기준으로 가장 먼저 고용된 직원의 정보를 반환
조건부 쿼리 예제
SELECT * FROM employees WHERE department_id = 10 ORDER BY salary DESC FETCH FIRST ROW ONLY; |
부서 ID가 10인 직원 중 가장 높은 급여를 받는 직원의 정보를 반환
서브쿼리 예제
SELECT * FROM (SELECT * FROM employees ORDER BY salary DESC) FETCH FIRST ROW ONLY; |
급여가 가장 높은 직원을 반환
JOIN과 함께 사용하기
SELECT e.*, d.department_name FROM employees e JOIN departments d ON e.department_id = d.department_id ORDER BY e.hire_date FETCH FIRST ROW ONLY; |
고용일을 기준으로 가장 먼저 고용된 직원과 그의 부서 이름을 반환
4. 성능 최적화와 고려 사항
인덱스 사용
적절한 인덱스를 사용하면 FETCH FIRST ROW의 성능을 크게 향상시킬 수 있다.
힌트 사용
쿼리 힌트를 사용하여 옵티마이저에게 최적의 실행 계획을 선택하도록 유도할 수 있다.
비용 기반 최적화
쿼리 실행 계획을 분석하여 비용을 최소화하는 방향으로 최적화할 수 있다.
비용 기반 최적화
쿼리 실행 계획을 분석하여 비용을 최소화하는 방향으로 최적화할 수 있다.
실행 계획 분석
EXPLAIN PLAN 명령을 사용하여 쿼리의 실행 계획을 분석하고 성능을 향상시킬 수 있다.
5. 다른 데이터베이스와의 비교
MySQL
SELECT * FROM employees ORDER BY hire_date LIMIT 1; |
LIMIT 키워드를 사용하여 유사한 기능을 구현할 수 있다.
PostgreSQL
SELECT * FROM employees ORDER BY hire_date LIMIT 1; |
LIMIT 키워드를 사용하여 유사한 기능을 구현할 수 있다.
SQL Server
SELECT TOP 1 * FROM employees ORDER BY hire_date; |
TOP 키워드를 사용
차이점 및 주의 사항
각 데이터베이스마다 약간의 문법 차이가 있으므로, 해당 데이터베이스의 문서를 참고하여 사용하는 것이 좋다.
FETCH FIRST ROW는 데이터베이스에서 쿼리 결과를 제한하는 유용한 기능으로,
적절한 사용을 통해 성능 최적화 및 효율적인 데이터 조회를 할 수 있다.
'공부방 > DataBase' 카테고리의 다른 글
[MariaDB] ADD COLUMN 사용법 (0) | 2025.01.03 |
---|---|
Subquery returns more than 1 row (0) | 2024.12.19 |
[Oracle] 콤마로 분리된 문자열을 여러 행으로 변환(REGEXP_SUBSTR) (1) | 2024.03.29 |
[Oracle] 가로(행) 데이터를 세로(열)로 출력 (0) | 2023.12.14 |
[Oracle] MERGE기능 (0) | 2023.11.19 |