[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 |
Leave a comment