-- 2020041307 / Top 쿼리
- ORACLE
- 2020. 4. 30.
-- [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 문을 넣어줘도 동일하게 출력한다
'ORACLE' 카테고리의 다른 글
2020040907 / [10] 제약 조건 추가하기 (0) | 2020.04.30 |
---|---|
2020040907 / [9] Default 제약 조건 명시 방법 (0) | 2020.04.30 |
2020041406 /데이터 제어어 DCL(Data Control Language) 권한(Role) (0) | 2020.04.30 |
2020040906 / -- [8] Default 제약 조건 설정 (0) | 2020.04.30 |
-- 2020041307 / 뷰 with read only (0) | 2020.04.30 |