본문 바로가기
공부방/DataBase

FETCH FIRST ROW

by SmartCow 2024. 7. 6.

해당 기능은 오라클 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는 데이터베이스에서 쿼리 결과를 제한하는 유용한 기능으로,
 적절한 사용을 통해 성능 최적화 및 효율적인 데이터 조회를 할 수 있다.