예시 1) 급여가 높은 순서대로 상위 5 명의 직원 정보 출력
SELECT *
FROM (SELECT * FROM EMP ORDER BY SAL DESC)
WHERE ROWNUM <= 5
ORDER BY SAL DESC;
예시 2) 급여가 높은 순서대로 상위 4~6 번째 직원 정보 출력 (ROWNUM 은 1 을 포함해야 한다)
방법 1.
SELECT *
FROM (SELECT ROWNUM AS RN, A.*
FROM (SELECT * FROM EMP ORDER BY SAL DESC) A) B
WHERE RN BETWEEN 4 AND 6
ORDER BY SAL DESC;
방법 2.
SELECT *
FROM (SELECT EMP.*,
RANK() OVER(ORDER BY SAL DESC) AS RN
FROM EMP) A
WHERE RN BETWEEN 4 AND 6
ORDER BY SAL DESC;
SQL Server는 TOP 조건을 사용하게 되면 별도 처리 없이 관련 Order By 절의 데이터 정렬 후 원하는 일부 데이터만 쉽게 출력할 수 있다.
WITH TIES 옵션은 ORDER BY 절의 조건 기준으로 TOP N 의 마지막 행으로 표시되는 추가 행의 데이터가 같을 경우 N+ 동일 정렬 순서 데이터를 추가 반환하도록 지정하는 옵션이다.
-- 사원 테이블에서 급여가 높은 2명을 내림차순으로 출력
SELECT TOP(2) ENAME, SAL
FROM EMP
ORDER BY SAL DESC;
-- 사원 테이블에서 급여가 높은 2명을 내림차순으로 출력하는데 같은 급여를 받는 사원이 있으면 같이 출력
SELECT TOP(2) WITH TIES ENAME, SAL
FROM EMP
ORDER BY SAL DESC;
ORDER BY 컬럼 OFFSET N {ROW | ROWS} -- OFFSET : 건너뛸 행의 수
FETCH {FIRST | NEXT} N {ROW | ROWS} ONLY 예시 1 ) SAL 순서대로 상위 5명
SELECT EMPNO, ENAME, JOB, SAL FROM EMP
ORDER BY SAL DESC FETCH FIRST 5 ROWS ONLY; -- NEXT 와도 상관 없음
예시 2 ) SAL 순서대로 상위 4 ~ 6 번째
SELECT EMPNO, ENAME, JOB, SAL FROM EMP
ORDER BY SAL DESC
OFFSET 3 ROW
FETCH FIRST 2 ROW ONLY; -- NEXT 와도 상관 없음