728x90
반응형
SMALL

뷰(View)

- 뷰(View)는 테이블 또는 다른 뷰를 기초로 하는 논리적 테이블이다.

1. 뷰의 사용 목적

- 접근제어를 통한 자동 보안이 제공되므로 데이터베이스 액세스를 제한하기 위해 사용

- 복잡한 질의를 쉽게 만들어주기 때문에 사용자의 데이터 관리를 간단하게 해줌

- 같은 데이터를 다른 뷰로 나타낼 수 있으므로 같은 데이터에 대해 동시에 여러 사용자의 다른 응용프로그램 요구를 지원해줌.

2. 단순 뷰와 복합 뷰

특징 단순 뷰 복합 뷰
테이블 수 하나 둘 이상
함수 포함 없음 있음
데이터 그룹 포함 없음 있음
뷰를 통한 DML 있음 없음

*뷰에 관한 정보

SELECT * FROM USER_VIEWS;

뷰 생성, 데이터 검색, 수정, 삭제

1. 뷰 생성 권한

select * from user_role_privs; --현재 사용자의 롤

select * from user_sys_privs; -- 현재 사용자에게 주어진 권한

 

2. 뷰 생성

- CREATE VIEW 문장 내에서 서브쿼리 작성

- 서브쿼리는 조인 구문 포함 가능

- CREATE VIEW 절에서 열 별칭은 서브쿼리에서의 열과 같은 순서로 나열됨.

CREATE [OR REPLACE]
	[FORCE | NOFORCE]
VIEW view_name[(alias[, alias ...])]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint_name]]
[WITH READ ONLY]

1) 뷰 생성

create view emp_view_dept60
as select employee_id, first_name, last_name, job_id, salary
from employees
where department_id=60;
select * from emp_view_dept60;

 

2) 뷰 생성 서브쿼리에서 별칭 사용

create view emp_dept60_salary
as select
employee_id as empno,
first_name || ' ' || last_name as anme,
salary as monthly_salary
from employees
where department_id=60;
create view emp_dept60_salary (empno, name, monthly_salary)
as select
employee_id,
first_name || ' ' || last_name,
salary
from employees
where department_id=60;
select * from emp_dept60_salary;

 

3. 뷰 질의

select * from user_views;

4. 뷰 수정

- CREATE OR REPLACE VIEW 절을 사용하여 뷰를 수정

- ALTER 사용X

CREATE OR REPLACE VIEW veiw_name...
create or replace view emp_dept60_salary
as select
employee_id as empno,
first_name||' '||last_name as name,
job_id job,
salary
from employees
where department_id=60;
desc emp_dept60_salary;

5. 복합 뷰 생성

- 두 개 이상 테이블로부터 값을 출력하는 뷰를 생성

create view emp_view
as select
e.employee_id as id,
e.first_name as name,
d.department_name as department,
j.job_title as job
from employees e
left join departments d on e.department_id=d.department_id
join jobs j on e.job_id=j.job_id;
select * from emp_view;

 

6. 뷰 삭제

- 뷰는 데이터베이스에서 기본 테이블을 기반으로 하므로 데이터 손실 없이 삭제 가능

DROP VIEW view_name;

 

뷰를 이용한 DML 연산

1. 뷰에서 DML 연산 실행 규칙

- 단순 뷰에서 DML 연산 수행가능

- 뷰가 다음을 포함한다면 행 제거 불가능(그룹함수, GROUP BY, DISTINCT)

- 뷰가 다음을 포함한다면 데이터 수정 불가능(행제거불가표현, 표현식, ROWNUM)

- 뷰가 다음을 포함한다면 데이터 추가 불가능(행제거불가조건, 수정불가조건, NOTNULL)

create table emps as select * from employees;

 

1) 데이터 조작이 가능한 경우

- 단순 뷰에서 DML 연산수행 가능

create or replace view emp_dept60
as select * from emps where department_id=60;

delete from emp_dept60 where employee_id=104;
select * from emps where employee_id=104;

2) 행 제거가 안 되는 경우

create or replace view emp_dept60
as select distinct * from emps where department_id=60;

delete from emp_dept60 where employee_id=60;

3) 데이터 수정이 안 되는 경우

create or replace view emp_dept60
as select
employee_id,
first_name||' '||last_name as name,
salary*12 as annual_Salary
from emps where department_id=60;

update emp_dept60 set annual_salary=annual_salary*1.1
where employee_id=106;

 

4) 데이터 입력이 안 되는 경우

create or replace view emp_dept60
as select
employee_id,
first_name,
last_name,
email,
salary
from emps where department_id=60;

insert into demp_dept60
values(500,'JinKyoung','Heo', 'HEOJK',8000);

 

2. WITH CHECK POINT

- 뷰에 대한 DML연산이 뷰의 조건을 만족할 때만 수행하게 함

create or replace view emp_dept60
as select employee_id, first_name, hire_Date, salary, department_id
from emps
where department_id=60
with check option;

update emp_dept60
set department_id=10
where employee_id=105;

 

3. WITH READ ONLY

- DML 연산을 수행할 수 없게 함

- DML 수행 시 에러 발생

create or replace view emp_dept60
as select employee_id, first_name, hire_Date, salary, department_id
from emps
where department_id=60
with read only;

delete from emp_dept60
where employee_id=105;

 

인라인 뷰(Inline View)

- SQL 구문에서 사용 가능한 별칭(상관 이름)을 사용하는 서브 쿼리

- 기본질의의 FROM 절에 명명된 서브쿼리를 사용하는 것과 유사

- 객체가 아님.

select row_number, first_name, salary
from ( select first_name,salary,
row_number() over(order by salary desc) as row_number
from employees)
where row_number between 1 and 10;

 

728x90
반응형
LIST

'IT > SQL' 카테고리의 다른 글

[SQL] 13. 시퀀스, 인덱스, 동의어  (0) 2023.05.16
[SQL] 11. 제약조건(Constraints)  (0) 2023.05.15
[SQL] 10. 테이블 생성과 관리  (0) 2023.05.15
[SQL] 9. 트랜잭션(Transaction)  (0) 2023.05.15
[SQL] 8. 데이터 조작(DML)  (0) 2023.05.15

+ Recent posts