ORACLE 12C Row Limiting Clause 실습
오라클 12.1 이상에서는 행을 제한하는 구문을 제공하는데 이를 통해 기존 MySQL의 top-N 쿼리, 페이징 쿼리 등을 쉽게 할 수 있다. 예제를 통해 살펴보자.
- -----------------------------------------------------------------------------------------------------------
--ORACLE 12C Row Limiting Clause 실습
-- 오라클 12.1 이상에서는 행을 제한하는 구문을 제공하는데 이를 통해 기존 MySQL의 top-N 쿼리,
-- 페이징 쿼리 등을 쉽게 할 수 있다. 예제를 통해 살펴보자.
-----------------------------------------------------------------------------------------------------------
-- EMP 테이블은 14건의 데이터가 있다.
-- 사원명 및 급여를 확인하자.
SELECT ename, sal FROM emp ORDER BY SAL DESC;
-- 급여 상위 6명(중복되는 급여가 있더라도 무조건 6개 자름)
SELECT ename, sal
FROM emp
ORDER BY sal DESC
FETCH FIRST 6 ROWS ONLY;
-- 급여 상위 6명, 중복되는 급여가 있으면 모두 SELECT 한다.
SELECT ename, sal
FROM emp
ORDER BY sal DESC
FETCH FIRST 6 ROWS WITH TIES;
-- 급여 상위40%, 중복되는 급여가 있더라도 무조건 40% 기준으로 자른다.
SELECT ename, sal
FROM emp
ORDER BY sal DESC
FETCH FIRST 40 PERCENT ROWS ONLY;
-- 급여 상위40%, 중복되는 급여가 있으면 모두 SELECT 한다.
SELECT ename, sal
FROM emp
ORDER BY sal DESC
FETCH FIRST 40 PERCENT ROWS WITH TIES;
-- OFFSET을 이용하여 페이징 처리
-- 급여 내림차순으로 한페이지에 3개씩 3번째 페이지
-- 6개를 스킵하고 다음 3개 레코드 추출
SELECT ename, sal
FROM emp
ORDER BY sal DESC
OFFSET 6 ROWS FETCH NEXT 3 ROWS ONLY;
-- OFFSET을 이용하여 페이징 처리
-- 6개를 스킵하고 남은 레코드의 100% 추출
SELECT ename, sal
FROM emp
ORDER BY sal DESC
OFFSET 6 ROWS FETCH NEXT 50 PERCENT ROWS ONLY; --percent는 전체14건에서의 퍼센트