-- 2020041307 / Top 쿼리

-- [13] Top 쿼리


-- 상위 몇 개의 data만을 출력하고 싶을 때

-- 1) 사원 중에서 입사일이 가장 빠른 사원 5명(top~5)만을 얻어오는 질의문

-- 2) 사원 중에서 급여를 가장 많이 받는 사원 7명만을 얻어오는 질의문

-- 3) TOP-N을 구하기 위해 rownum & inline view가 사용


-- [rownum]의 특징

-- 1) 오라클에서만 지원하는 기능

-- 2) 오름차순 정렬을 하더라도 rownum 컬럼 값은 바뀌지 않는다

-- 3) 오라클이 내부적으로 부여하는데 insert 문을 이용하는 입력하면 입력한 순서에 따라 1씩 증가되면서 값이 지정

-- 4) 정렬된 순서대로 rownum 컬럼 값이 매겨지도록 하려면 새로운 테이블이나 뷰로 새롭게 데이터를 저장해야만 한다



-- [rownum] 컬럼 값 출력

select rownum, empno, ename, hiredate

from emp;

-- rownum의 값은 삽입 순서에 따라 부여된 값이다



select rownum, empno, ename, hiredate

from emp

order by hiredate;

-- rownum의 값은 순서는 변경되어 있으나 출력 값은 위와 동일하다



create or replace view view_hire -- 새롭게 view 테이블이 생성되면 무조건 rownum을 생성하게 된다 

as

select empno, ename, hiredate

from emp

order by hiredate; -- 입사일자로 정렬



select * from view_hire;



select rownum, empno, ename, hiredate

from view_hire;



-- [1] rownum을 이용

select rownum, empno, ename, hiredate

from view_hire

where rownum <= 5; -- 상위 5개만을 출력한다



[문제] 입사일 기준으로 3번째 ~ 7번째 사이에 입사한 사원을 출력해 보자

select rownum, empno, ename, hiredate

from view_hire; -- view_hire 테이블 자체가 위에서 만들때 오름차순으로 날짜 순서대로 데이터를 출력하게 만들어져  있는 상태이다


select rnum, empno, ename, hiredate -- rnum 별칭으로 사용 가능하다

from (select rownum rnum, empno, ename, hiredate -- rnum 별칭 부여

        from view_hire) -- inline view 적용 테이블이 오는 자리에 select 문을 적용하는 것

where (rnum >=3) and (rnum <=7);






[문제] 




[문제] 입사일 기준으로 내림차순으로 정렬을 해서 5와 10사이의 존재하는 사원을 출력해 보자




-- [2] inline view

select rownum, empno, ename, hiredate

from (select empno, ename, hiredate -- 위의 view_hire select문으로 변경해도 동일하게 출력한다

        from emp

        order by hiredate )

where rownum <= 5;



-- 위에서 view_hire 생성한 select 문을 넣어줘도 동일하게 출력한다


댓글

Designed by JB FACTORY