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, |
ROW_NUMBER()
ROW_NUMBER()함수는 1부터 시작해서 각 row(데이터값)별로 순차적으로 리턴한다.
RANK(), DENSE_RANK()가 동일한 값이 있을경우 동일한 순번을 리턴하지만,
ROW_NUMBER()는 무조건 순서대로 순번을 리턴한다.
예제) 부서별 급여순위 3위 까지 조회 인라인뷰를 이용하여
select t.* |
'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 |