카테고리 없음

[ORACLE 5일차]view(뷰)/

GoGo개발 2022. 9. 6. 11:44
VIEW 

 

VIEW(뷰)란? 테이블은 아니지만 select 되어진 결과물을 마치 테이블 처럼 보는것(간주하는 것)이다.

 VIEW(뷰) 는 2가지 종류가 있다.
첫번째로 inline view 가 있고, 두번째로 stored view 가 있다. 
nline view 는 바로 위의 예제에 보이는 V 인 것이다.
즉, select 구문을 괄호( )를 쳐서 별칭(예 : V)을 부여한 것을 말한다.

stored view 는 복잡한 SQL(Structured Query Language == 정형화된 질의어)을 저장하여
select 문을 간단하게 사용하고자 할 때 쓰인다.
그래서 inline view 는 1회성이고, stored view는 언제든지 불러내서 재사용이 가능하다.

 

1.  Stored View (저장된 뷰) 생성하기 

 

 create or replace view 뷰명  
    as
    select 문장;

 뷰명 으로 되어진 view 가 없으면 create(생성) 하고, 만약에 뷰명 으로 되어진 view 가 이미 존재한다라면
  이전에 정의해둔 view를 없애버리고 select 문장 으로 replace(수정)해라는 말이다.  

 

<예제>

 

inline 뷰

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
--- [퀴즈] employees 테이블에서 월급등수가 1등 부터 10등까지 사원들만 
---       사원번호 , 사원명 , 월급 , 월급등수 을 나타내세요.
 
select employee_id AS 사원번호
     , first_name || ' ' || last_name AS 사원명
     , nvl(salary + (salary * commission_pct), salary) AS 월급
     , rank() over(order by nvl(salary + (salary * commission_pct), salary) desc ) AS 월급등수
from employees
where rank() over(order by nvl(salary + (salary * commission_pct), salary) desc ) <= 10
-- !!! 오류 !!!
-- rank() 함수는 where 절에 바로 쓸수가 없다.!!!!
 
select V.*
from 
(
 select employee_id AS 사원번호
     , first_name || ' ' || last_name AS 사원명
     , nvl(salary + (salary * commission_pct), salary) AS 월급
     , rank() over(order by nvl(salary + (salary * commission_pct), salary) desc ) AS 월급등수
 from employees
) V  -- V 는 괄호()속의 select 되어져 나온 결과물을 V 라는 이름을 가지는 테이블로 간주해 버린다.
where V.월급등수 <= 10;
cs

 

 

sotred 뷰

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
create or replace view view_employeerank
as
select employee_id AS 사원번호
     , first_name || ' ' || last_name AS 사원명
     , nvl(salary + (salary * commission_pct), salary) AS 월급
     , rank() over(order by nvl(salary + (salary * commission_pct), salary) desc ) AS 월급등수
from employees;
-- View VIEW_EMPLOYEERANK이(가) 생성되었습니다.
 
 
 
select *
from view_employeerank
where 월급등수 <= 10;
cs