Database/Oracle

[Oracle] VIEW

best 2016. 2. 18. 15:19

VIEW : 가상의 테이블을 생성한다.

복잡한 쿼리를 단순하게 만들 수 있다.

 

 

 

 

 

 

실습1 - LAST_NAME 에 u 가 포함되는 사원들과 동일 부서에 근무하는 사원들의 사번 및 LAST_NAME 을 조회한다.

 

두 가지 방법으로 풀 수 있다.

첫번째로는 서브쿼리를 이용한 풀이

 

1
2
3
4
5
6
7
8
9
SELECT  EMPLOYEE+OD
        , LAST_NAME
FROM    EMPLOYEES
WHERE   DEPARTMENT_ID IN (
                          SELECT DEPARTMENT_ID
                          FROM EMPLOYEES
                          WHERE LAST_NAME LIKE '%u%'
                          )
;
cs

 

 

 

두번째 방법은 View를 이용한

 

1
2
3
4
5
6
7
8
9
10
SELECT  DISTINCT EMPLOYEE_ID
        , LAST_NAME
FROM    (
            SELECT  DEPARTMENT_ID  -- 구분할 수 있는 것을 조회해야 한다.
            FROM    EMPLOYEES
            WHERE   LAST_NAME LIKE '%u%'
        ) U_NAME
        , EMPLOYEES E
WHERE   U_NAME.DEPARTMENT_ID = E.DEPARTMENT_ID
;
cs

 

 

 

 

실습2 - 회사 전체 평균 연봉 보다 더 버는 사원들 중  -- INLINE VIEW

LAST_NAME 에 u 가 있는 사원들이 근무하는 부서에서  --INLINE VIEW                   문제를 끊어서 보면 어떤 것을 INLINE VIEW로 사용할지 쉽게 볼 수 있다.

근무하는 사원들의 사번, LAST_NAME 및 연봉을 조회한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SELECT    DISTINCT EMPLOYEE_ID
          , LAST_NAME
          , SALARY
FROM     (
          /*LAST_NAME 에 u 가 있는 사원들이 근무하는 부서*/
            SELECT    DEPARTMENT_ID
            FROM      (
                      /* 회사 전체 평균 연봉 보다 더 버는 사원 */
                      SELECT EMPLOYEE_ID
                      FROM   EMPLOYEES
                      WHERE  SALARY > (  
                                        SELECT   AVG(SALARY)
                                        FROM     EMPLOYEES
                                        )
                    ) EMP2
                    , EMPLOYEES E
            WHERE     EMP2.EMPLOYEE_ID = E.EMPLOYEE_ID
            AND       LAST_NAME = '%u%'
        ) DEPT
        , EMPLOYEES E
WHERE   DEPT.DEPARTMENT_ID = E.DEPARTMENT_ID
;
cs