고래씌

[Oracle] 5-2. DML(SELECT) - INLINE VIEW(인라인 뷰), WINDOW FUNCTION(순위 매기는 함수) 본문

Database/Oracle

[Oracle] 5-2. DML(SELECT) - INLINE VIEW(인라인 뷰), WINDOW FUNCTION(순위 매기는 함수)

고래씌 2023. 11. 28. 11:43

1. 인라인 뷰(INLINE VIEW)

: FROM 절에 서브쿼리를 제시하는 것
    
=> 서브쿼리를 수행한 결과를 테이블 대신해서 사용

 

▶ 인라인 뷰를 주로 사용하는 예)

- TOP-N 분석 : 데이터베이스 상에 있는 자료중 최상위 N개의 자료를 보기 위해 사용하는 기능

 

 

▶ ① 보너스 포함 연봉이 3000만원 이상인 사원들의 사번, 이름, 보너스포함연봉, 부서코드를 조회

 

 

 

② 인라인 뷰를 사용하여 사원명만 골라내기

 

☞ 실행순서는 다음과 같다. MAIN의 FROM 절이 먼저 실행되고 안에 있는 FROM절, WHERE, SELECT 순으로 실행된다.

 

 

 전 직원 중 급여가 가장 높은 상위 5명(순위, 사원명, 급여)

*ROWNUM : 오라클에서 제공해주는 칼럼, 조회된 순서대로 1부터 순번을 부여해주는 칼럼

 

....

 

 ORDER BY 로 정렬한 테이블을 가지고 ROWNUM 부여

 

 

 

 

▶ 각 부서별 평균 급여가 높은 3개의 부서의 부서코드, 평균 급여 조회

① 각 부서별 평균 급여 내림차순 정렬

 

 

 

② 순번 부여, 상위 3개만 추리기

 

 

 

 

 

ROWNUM을 이용해서 순위를 매길 수 있다.
다만, 정렬이 되지 않은 상태에서는 순위를 매겨도 의미가 없으므로 선 정렬 후 순위 매기기를 해야한다.
즉, 인라인 뷰로 먼저 ORDER BY를 하고 메인쿼리에서 순번을 붙이면 됨

 


2. WINDOW FUNCTION(순위 매기는 함수)

▶ RANK() OVER(정렬기준)
 DENSE_RANK() OVER(정렬기준)
    - RANK() OVER(정렬기준) : 공동 1위가 3명이다라고 한다면 그 다음순위는 4위로 하겠다.
    - DENSE_RANK() OVER(정렬기준) : 공동 1위가 3명이라면 그 다음 순위는 2위로 하겠다.
    
- 정렬 기준 : ORDER BY 절(정렬기준 칼럼이름, 오름차순/내림차순)
- SELECT 절에서만 기술이 가능하다.

 

 

▶ 사원들의 급여가 높은 순서대로 매겨서 사원명, 급여, 순위 조회 : RANK OVER

 

 

☞ 공동 19위 다음 21등이 오는 것 확인

 

 

인라인뷰로 5위까지만 출력하기