본문 바로가기

Daily Report

120926 Oracle view의 분류(스칼라뷰,인라인뷰,서브쿼리), 분석함수(rank(),over())

VIEW의 분

:각각의 쿼리에 서브쿼리가 등장했을때 부르는 명칭이랑 쓰임새가 약간씩 다름니다.

 

참고 서브쿼리 : 쿼리안의 도 다른 쿼리를 뜻합니다 주로 where절에 오는 경우를 뜻합니다

 

select => 스칼라뷰(서브쿼리,하의질의) : 하나의 데이터를 리턴시켜주는 질의 

from => 인라인뷰(서브쿼리,하의질의) : 하나의 가상 테이블을 리턴시켜주는 질의

where => (서브쿼이(하의질의)) : 조건값들을 리턴시켜주는 질의

 

 

 인라인뷰
 SELECT emp.부서이름,emp.부서코드,emp.사원이름,emp.최대임금
 FROM (SELECT A.부서명 AS 부서이름,B.부서코드,B.사원이름,C.월급 AS 최대임금
                            ,RANK()  OVER(PARTITION BY 부서코드 ORDER BY 월급 DESC) AS 월급순위
             FROM JOB_EMP A,JOB_MEMBER B,JOB_SAL C
             WHERE A.부서코드=B.부서코드 AND B.직급코드=C.직급코드
             ORDER BY B.부서코드
             ) emp
WHERE emp.월급순위=1

 

 

 서브쿼리

 SELECT emp.EMPLOYEE_ID 사원번호, emp.LAST_NAME 이름, emp.SALARY 급여, dept.DEPARTMENT_NAME
  FROM EMPLOYEES emp, DEPARTMENTS dept
  WHERE emp.DEPARTMENT_ID = dept.DEPARTMENT_ID
  AND (dept.DEPARTMENT_ID,emp.SALARY) IN (
                      SELECT DEPARTMENT_ID, MAX(salary)
                      FROM EMPLOYEES
                      GROUP BY DEPARTMENT_ID
                    )
  ORDER BY emp.EMPLOYEE_ID asc;

 

 

 

 

오라클의 분석함수

 

  RANK() 함수
    순위를 리턴하는 함수입니다
    공동 순위가 있을경우 중복으로 표시됩니다 예를들어 2위가 2명이다면 둘다 2위로 표시됩니다
   

  OVER() 함수
    order by, group by 서브쿼리의 정렬 및 그룹선언 함수입니다 

 

기본형식

 select employee_id,
      salary,
      rank() over(order by salary desc)s_ranking
from employees;

 

 

ROW_NUMBER()

  ROW_NUMBER()함수는 1부터 시작해서 각 row(데이터값)별로 순차적으로 리턴한다.
  RANK(), DENSE_RANK()가 동일한 값이 있을경우 동일한 순번을 리턴하지만,
  ROW_NUMBER()는 무조건 순서대로 순번을 리턴한다.

 

예제) 부서별 급여순위 3위 까지 조회 인라인뷰를 이용하여 

select t.*
from(
    select department_id,
            last_name,
            salary,
            row_number() over(partition by department_id order by salary desc)sal
            from employees
        )t
where t.sal <=3;

 

 

'Daily Report' 카테고리의 다른 글

121009 JAVA 오버로딩 부제:사과장수  (0) 2012.10.09
121009 Oracle 1차 기본정리  (0) 2012.10.09
120924 Oracle 하위질의01  (0) 2012.09.24
120920 Oracle Join 예제(join의 4가지예)  (0) 2012.09.20
120919 Oracle Subquery 보충  (0) 2012.09.19