2020년 7월 19일 일요일

순위 매기기 EMP 테이블에서 급여 상위 1위~5위까지 데이터를 추출해보자. 아래와 같이 여러 방법으로 데이터를 추출할 수 있다. 급여순위로 내림차순 정렬이 필요할 것이고...

순위 매기기

EMP 테이블에서 급여 상위 1위~5위까지 데이터를 추출해보자. 아래와 같이 여러 방법으로 데이터를 추출할 수 있다. 급여순위로 내림차순 정렬이 필요할 것이고 앞에서 배운 rownum을 적절히 이용하면 된다.

SQL> select e.*

from (select substr(ename,1, 20) ename,

sal,

deptno,

rank() over (order by sal desc) "순위"

6 from emp) e

7 where rownum <= 5 ;

ENAME SAL DEPTNO 순위

-------------------- ---------- ---------- ----------

KING 5000 10 1

FORD 3000 20 2

SCOTT 3000 20 2

JONES 2975 20 4

BLAKE 2850 30 5

SQL> select rownum, e.*

from (

select ename, sal from emp a

where 5 > (select count(*)

       from emp b

      where b.sal > a.sal)

order by sal desc

) e ;

ROWNUM ENAME SAL

---------- ---------- ----------

1 KING 5000

2 SCOTT 3000

3 FORD 3000

4 JONES 2975

5 BLAKE 2850

SQL> SELECT rownum, ename ,sal

FROM (    

SELECT ename ,sal ,

row_number () over (ORDER BY sal DESC) rn

FROM emp )

WHERE rn <= 5;

ROWNUM ENAME SAL

---------- ---------- ----------

1 KING 5000

2 SCOTT 3000

3 FORD 3000

4 JONES 2975

5 BLAKE 2850

SQL> SELECT rownum, ename ,sal

FROM (    

SELECT ename ,sal

FROM emp

ORDER BY sal DESC) e

WHERE rownum <= 5 ;

ROWNUM ENAME SAL

---------- ---------- ----------

1 KING 5000

2 SCOTT 3000

3 FORD 3000

4 JONES 2975

5 BLAKE 2850

-- 이번에는 인덱스와 오라클 힌트구문을 이용해 보자. index_desc힌트는 인덱스 영역에서 인덱스 역순 스캔하라는 의미의 힌트다.

SQL> create index idx_emp_sal on emp(sal);

SQL> SELECT rownum, ename ,sal

FROM (

SELECT /*+ index_desc(emp idx_emp_sal) */

ename ,sal

FROM emp

WHERE sal > 0)

WHERE rownum <= 5;

ROWNUM ENAME SAL

---------- ---------- ----------

1 KING 5000

2 FORD 3000

3 SCOTT 3000

4 JONES 2975

5 BLAKE 2850

위 방법 중 가장 현명한 방법은 무엇인지 고민해 보고 실습 테이블을 MYEMP1으로 바꾸어서 실습해보라.

INLINE(잠시만요) VIEW : VIEW중에서 SQL명령어 라인 안에서 기술되는 VIEW로써 WHERE절의 서브쿼리 또는 FROM절 다음에 테이블처럼 사용하기 위해 사용된다. 간단한 예로 SELECT절의 FROM다음에 테이블이 오는데, 이곳에 또 다른 SELECT문을 기술하여 이를 인라인뷰(IN_LINE VIEW)하고 한다. 주로 조인 연산을 줄이기 위해 또는 분리된 쿼리를 하나의 쿼리에 모아서 사용하기 위해 사용한다.

댓글 없음:

댓글 쓰기

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...