라일락 꽃이 피는 날

[Oracle] 출력되는 행 제한 본문

프로그래밍/Oracle

[Oracle] 출력되는 행 제한

eunki 2022. 5. 31. 18:19
728x90

출력되는 행을 제한하는 함수

  • rownum : 결과로 출력되는 행에 번호 부여
  • order by 컬럼명 asc/desc fetch first 숫자 rows only : 상위 몇 개의 데이터만 출력
  • order by 컬럼명 asc/desc fetch first 숫자 perent rows only : 상위 몇 개의 데이터만 출력

 

 

 

 

예제 1. 월급이 1000 에서 3000 사이인 사원들의 사원 번호, 이름, 월급을 출력하는데, 맨 위에 3개의 행만 출력

select empno, ename, sal
    from emp
    where sal between 1000 and 3000
        and rownum <= 3;

출력 되는 결과에서 위에 몇 개의 행만 보려고 할 때, rownum 을 사용하면 된다.

 

 

 

예제 2. 월급이 1000 에서 3000 사이인 사원들의 사원 번호, 이름, 월급을 출력하는데, 출력 결과에서 두 번째 행만 출력

select empno, ename, sal
    from emp
    where sal between 1000 and 3000
        and rownum = 2;

rownum 은 1만 검색 되고 2부터는 위와 같이 하면 검색되지 않는다.

 

 

select * 
    from (select rownum as 번호, empno, ename, sal
            from emp
            where sal between 1000 and 3000)
    where 번호 = 2;

해결 방법은 from 절의 괄호 안의 쿼리문의 결과를 먼저 출력해서 메모리에 올려놓고,

그 메모리에 올려놓은 결과 중에서 번호가 2번인 것을 가져오면 된다.

 

 

 

예제 3. 월급이 높은 사원 순으로 사원 번호, 이름, 직업, 월급을 출력하는데, 맨 위에 4개의 행만 출력

select empno, ename, job, sal
    from emp
    order by sal desc fetch first 4 rows only;

 

 

 

예제 4. 직업이 SALESMAN, ANALYST 인 사원들의 이름, 월급, 직업을 출력하는데, 월급이 상위 5% 에 해당하는 사원들만 출력

select ename, sal, job
    from emp
    where job in ('SALESMAN', 'ANALYST')
    order by sal desc fetch first 5 percent rows only;

 

 

 

예제 5. 사원 번호, 이름, 직업, 월급을 출력하는데, 월급이 높은 사원 순위 1등과 2등만 출력

select empno, ename, job, sal  
    from emp
    order by sal desc fetch first 2 rows with ties;
728x90