[SQL] 057. 출력되는 행 제한하기2

Updated:

초보자를 위한 SQL 200제 교재를 토대로 공부한 내용입니다.

오라클 SQL을 기반으로 합니다.

실습에 사용한 테이블은 정보문화사 홈페이지에서 받을 수 있습니다.


[예시]

FETCH를 이용해서 출력 행을 제한하는 다양한 예시를 살펴보자.

다음 예시는 SAL(월급)을 내림차순으로 정렬 후 위의 4개 행만 출력한다.

(ORDER BY를 사용하지 않고 FETCH만 사용할 수 있다.)

-- 월급이 높은 4건 출력
SELECT EMPNO, ENAME, JOB, SAL
FROM EMP
ORDER BY SAL DESC 
FETCH FIRST 4 ROWS ONLY;

[결과]

EMPNO ENAME JOB SAL
7839 KING PRESIDENT 5000
7902 FORD ANALYST 3000
7788 SCOTT ANALYST 3000
7566 JONES MANAGER 2975

[예시2]

다음 예시는 SAL(월급)을 내림차순으로 정렬 후 위의 30%만큼 행을 출력한다.

만약 행이 100개라면 30개만 출력한다.

-- 월급이 상위 30%에 속하는 경우 출력
SELECT EMPNO, ENAME, JOB, SAL
FROM EMP
ORDER BY SAL DESC 
FETCH FIRST 30 PERCENT ROWS ONLY;

[결과2]

EMPNO ENAME JOB SAL
7839 KING PRESIDENT 5000
7788 SCOTT ANALYST 3000
7902 FORD ANALYST 3000
7566 JONES MANAGER 2975
7698 BLAKE MANAGER 2850

[예시3]

다음 예시는 SAL(월급)을 내림차순으로 정렬 후 위의 2개 행을 출력한다.

추가로 처음 2개의 행과 SAL(월급)이 같은 행을 출력한다.

-- 처음 N개의 행과 값이 일치하는 경우 출력
-- (ORDER BY로 지정한 열의 값과 같은 경우)
SELECT EMPNO, ENAME, JOB, SAL
FROM EMP
ORDER BY SAL DESC 
FETCH FIRST 2 ROWS WITH TIES;

[결과3]

처음 2개 행 중 두 번째 행의 SAL(월급) 3000과 같은 행이 추가로 출력되었다.

EMPNO ENAME JOB SAL
7839 KING PRESIDENT 5000
7902 FORD ANALYST 3000
7788 SCOTT ANALYST 3000

[예시4]

다음 예시는 SAL(월급)을 오름차순으로 정렬 후 10번째 행부터 3개의 행을 출력한다.

OFFSET으로 숫자를 지정하면 그 다음 행부터 출력된다.

-- 출력이 시작되는 행의 위치 지정
-- OFFSET N: N+1번째 행부터 출력
SELECT EMPNO, ENAME, JOB, SAL, ROW_NUMBER() OVER (ORDER BY SAL DESC) AS ROW_NUM
FROM EMP
ORDER BY SAL 
DESC OFFSET 9 ROWS FETCH FIRST 3 ROWS ONLY;

[결과4]

OFFSET으로 9를 지정해 다음 행인 10행 부터 출력되었다.

EMPNO ENAME JOB SAL ROW_NUM
7654 MARTIN SALESMAN 1250 10
7521 WARD SALESMAN 1250 11
7876 ADAMS CLERK 1100 12

Tags:

Categories:

Updated:

Leave a comment