뷰 생성, 데이터 검색, 수정, 삭제
뷰는 테이블 또는 다른 뷰를 기초로 하는 논리적 테이블입니다.
- 접근제어를 통한 자동 보안이 제공되므로 데이터베이스 엑세스를 제한하기 위한 사용합니다.
- 복잡한 질의를 쉽게 만들어주기 때문에 사용자의 데이터 관리를 간단하게 해 줍니다.
- 동일한 데이터의 다른 뷰를 나타낼 수 있기 때문에 동일 데이터에 대해 동시에 여러 사용자의 상이한 응용이나 요구를 지원해 줍니다.
View 의 정의
하나 이상의 테이블에서 원하는 모든 데이터를 선택하여, 그들을 사용자 정의하여 나타낸 것이다.
단순뷰 - 한개의 원본테이블을 사용해서 생성
복합 뷰 - 두개 이상의 이본 테이블에 의해 생성(조인을 통해 생성된...)
뷰는 단순 뷰와 복합 뷰가 있습니다. 근본적인 차이점은 DML (삽입, 갱신, 삭제) 작업에 관련되어 있습니다.
(뷰 정보확인은 / select *from user_view; )
뷰를 만들기 위해서는 뷰를 생성할 수 있는 권한이 있어야 합니다. 현재 접속한 사용자에게 부여된 롤(ROLE) 을 확인하거나, 권한을 확인하여 뷰 생성 권한이 있는지 조사할 수 있습니다.
다음 구문은 현재 사용자에게 주어진 롤(ROLE) 을 출력합니다.
sql> SELECT *FROM USER_ROLE_PRIVS;
다음 구문은 현재 사용자에게 주어진 권한을 출력합니다.
SQL> SELECT * FROM USER_SYS_PRIVS;
- CREATE VIEW 문장 내에서 서브쿼리를 작성합니다.
- 서브쿼리는 복합 SELECT 구문을 포함할수 있습니다.
CREATE VIEW 문장에서 서브쿼리를 내장하여 뷰를 생성할 수 있습니다. 뷰를 정의하는 서브쿼리는 조인, 그룹, 서브쿼리를 포함하는 복잡한 SELECT 구문을 포함할 수 있습니다.
서브쿼리에서 열 별칭을 포함함으로써 열 이름을 제어할 수 있습니다. 서브쿼리의 SELECT 절에서 수식을 사용할 경우에는 SELECT 절에 열 별칭을 사용하거나 CREATE VIEW 절에 열 이름을 포함해줘야 합니다.
다음 구문은 부서 60에 대해 사원 번호는 EMPNO, 이름은 NAME 급여는 MONTHLY_SALARY 별칭을 갖는 뷰를 생성합니다.
두 개 이상 테이블로부터 값을 디스플레이 하는 뷰를 생성합니다.
다음 구문은 모든 사원의 아이디와 이름 그리고 부서일음과 직무 이름을 출력합니다. 부서이름은
DEPARTMENTS 테이블 과 조인을 통해서 알아내며, 직무이름은 JOBS 테이블과 조인을 통해서 알 수 있습니다.
뷰 수정
- CREATE OR REPLACE VIEW 절을 사용하여 뷰를 수정합니다.
- CREATE VIEW 절에서 열 별창들은 서브쿼리에서의 열과 동일한 순서로 나열됩니다.
CREATE OR REPLACE VIEW view_name.....
OR REPLACE 옵션은 비록 이 이름이 이미 존재할지라도 뷰가 생성될수 있도록 해주므로, 그 소유자에 대한 이전 뷰 버전을 새로운 뷰 버전을 새로운 뷰 구문으로 대체합니다.
다음 구문은 EMP_DEPT60_SALARY 뷰를 수정합니다
- 뷰는 데이터베이스에서 기본 테이블을 기반으로 하기 때문에 데이터 손실 없이 뷰를 삭제합니다.
뷰를 제거하기 위해 DROP VIEW 문장을 사용합니다. 이문장은 데이터베이스에서 뷰 정의를 제거합니다.
뷰 삭제는 뷰가 만들어진 기본 테이블에는 영향을 미치지 않습니다. 그 뷰에 기초하여 만들어진 뷰 또는 다른 어플리케이션은 무효화 됩니다.
뷰를 만든 사람 또는 DROP ANY VIEW 권한을 가진 사람만 뷰를 제거할 수 있습니다.
DROP VIEW view_name;
다음 구문은 뷰를 삭제합니다.
SQL> DROP VIEW emp_dept60_salalry;
뷰의 규칙 정리
- 단순 뷰에서 DML연산을 수행할 수 있습니다.
- 뷰가 다음을 포함한다면 행을 제거할 수 없습니다.
- 그룹함수
- GROUP BY 절
- DISTINCT 키워드
- 뷰가 다음을 포함한다면 데이터를 수정할 수 없습니다.
- 위의 행 제거 할 수 없는 조건
- 표현식으로 정의된 열
- ROWNUM 의사열
- 뷰가 다음을 포함하다면 데이터를 추가할 수 없습니다.
- 위의 행 제거와 수정 할 수 없는 조건
- 뷰에 의해 선택되지 않은 NOT NULL 열이 기본 테이블에 있을때
뷰를 이용한 DML 연산
뷰에 대한 DML 연산이 뷰의 조건을 만족할 때만 수행되도록 합니다.
뷰에서 부서번호를 변경하려고 하면 WITH CHECK OPTION 제약조건에 위배 되기 때문에 실패하게 됩니다.
VIEW 에 값이 수정되면 실제 테이블에도 반영이 되기 때문에 뷰를 읽기 용도로만 사용할 수 있습니다.
with Check option - 조건 컬럼 값을 변경하지 못하게 하는 옵션.
with read only - select 만 허용하는 옵션
뷰의 정의에 WITH READ ONLY 옵션을 추가하여 DML 연산이 수행될수 없게 합니다.
뷰 임의 행에서 DML을 수행하면 에러가 발생합니다.
WITH READ ONLY 옵션으로 뷰를 생성하여 뷰에서 DML 연산이 수행될 수 없게 합니다.
인라인뷰
- 인라인뷰는 SQL문에서 사용 가능한 별칭(상관 이름)을 사용하는 서브쿼리입니다.
- 인라인 뷰는 기본질의의 FROM 절에 명명된 서브쿼리를 사용하는 것과 유사합니다.
- 인라인 뷰는 스키마 객체가 아닙니다.
인라인 뷰는 FROM절에 서브쿼리가 온 것을 말합니다. FROM절에는 테이블 또는 뷰가 올수 있습니다.
그런데 서브쿼리를 FROM 절에 사용하는 서브쿼리도 하나의 뷰로 볼 수 있습니다. 그래서 FROM 절에 오는 뷰를 인라인 뷰라고 부릅니다.
'DB' 카테고리의 다른 글
SQL 사용자 권한 (0) | 2022.01.05 |
---|---|
SQUENCE INDEX(순차 적으로 증가하는 값) (0) | 2022.01.05 |
DML-1 (0) | 2022.01.04 |
DML(DATA MANIPULATION LANGUAGE) (0) | 2022.01.04 |
서브쿼리 (0) | 2022.01.01 |