SQL 11. 뷰란
관련링크
본문
테이블을 Select 할때 모두 가저오면 속도는 차이는 없다지만 메모리는 차지할 것 같다
그래서 일부만 가저오는데 이때마다 복잡한 구문을 작성하지 않고 간단하게 사용하기 위해
자주 쓸만한 쿼리문을 가상의 테이블로 만든후 다음에는 Select * from 으로 사용해도 되도록 하는것이 VIEW 다.
만드는법
CREATE VIEW viewnName AS 실제쿼리문
가상 테이블 뷰를 생성하면 데이터의 논리적인 부분 집합 또는 조합을 나타낼 수 있다.
뷰는 테이블 또는 다른 뷰를 기반으로 하는 논리 테이블로서 자체적으로 데이터를 포함하지 않지만 창과 마찬가지로 뷰를 통해 테이블의 데이터를 보거나 변경할 수 있다.
뷰의 기반이 되는 테이블을 기본 테이블이라고 하며 뷰는 데이터 딕셔너리에 SELECT문으로 저장된다.
뷰 사용 목적
․ 데이터 액세스를 제한하기 위해
․ 복잡한 질의를 쉽게 작성하기 위해
․ 데이터 독립성을 제공하기 위해
․ 동일한 데이터로부터 다양한 결과를 얻기 위해
뷰의 장점
․ 뷰는 테이블의 열을 선택적으로 표시할 수 있으므로 데이터 액세스를 제한합니다.
․ 뷰를 사용하면 복잡한 질의의 결과를 검색하는 단순한 질의를 만들 수 있다.
예를 들어, 조인 문 작성 방법을 몰라도 뷰를 사용하여 여러 테이블에 있는 정보를 질의할 수 있다.
․ 뷰는 임시 사용자와 응용 프로그램에 대해 데이터 독립성을 제공하며 하나의 뷰를 사용하여 여러 테이블에 있는 데이터
를 검색할 수 있다.
․ 뷰를 사용하면 사용자 그룹이 특정 기준에 따라 데이터를 액세스할 수 있다.
단순 뷰 및 복합 뷰
특징 단순 뷰 복합 뷰
테이블 수 하나 하나 이상
함수 포함 아니오 예
데이터 그룹 포함 아니오 예
뷰를 통한 DML 작업 예 불가능한 경우도 있음
단순 뷰와 복합 뷰 비교
뷰는 단순 뷰와 복합 뷰로 구분되는데 기본적인 차이는 INSERT, UPDATE 및 DELETE등의 DML 작업과 관련되어 있다.
․ 단순 뷰의 특징
- 한 테이블에서만 데이터를 얻는다.
- 함수 또는 데이터 그룹을 포함하지 않는다.
- 뷰를 통해 DML 작업을 수행할 수 있다.
․ 복합 뷰의 특징
- 여러 테이블에서 데이터를 얻는다.
- 함수 또는 데이터 그룹을 포함한다.
- 뷰를 통해 DML 작업을 수행할 수 없는 경우도 있다.
뷰 생성
CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW view
[(alias[, alias]...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint])
[WITH READ ONLY [CONSTRAINT constraint]);
구문 설명 :
OR REPLACE 뷰가 이미 있어도 다시 생성한다.
FORCE 기본 테이블의 존재 여부에 관계없이 뷰를 생성한다.
NOFORCE 기본 테이블이 있는 경우만 뷸르 생성한다. (기본값).
view 뷰 이름이다.
alias 뷰 질의에 의해 선택되는 표현식의 이름을 지정한다.
(별칭 수는 뷰에 의해 선택되는 표현식 수와 일치해야 한다.)
subquery 완전한 SELECT문이다.(SELECT 목록에서 열에 대해 별칭을 사용할 수 있다.)
WITH CHECK OPTION 뷰를 통해 액세스할 수 있는 행만 삽입 또는 갱 신할 수 있도록 지정한다.
constraint CHECK OPTION 제약 조건에 지정된 이름이다.
WITH READ ONLY 이 뷰를 통해서는 DML 작업을 수행할 수 없도록 한다.
MSSQL 디비 예제 :
SELECT emp_id, lname, job_lvl
From employee
WHERE pub_id =0877
CREATE VIEW empvu80 --=>view 생성
AS
SELECT emp_id, lname, job_lvl
From employee
WHERE pub_id =0877
SELECT * FROM empvu80
sp_columns empvu80
sp_helptext empvu80 --뷰 상세 내용 확인
․ CREATE VIEW 문에 서브 쿼리를 포함시킨다.
․ 서브 쿼리는 복합 SELECT 구문을 포함할 수 있다.
예제) 뷰 생성
․ 부서80의 사원에 대한 자세한 정보를 포함하는 뷰 EMPVU80을 생성한다.
오라클 디비 예제 :
CREATE VIEW empvu80
AS SELECT employee_id, last_name, salary
FROM employees
WHERE department_id = 80;
View created.
․ iSQL*Plus의 DESCRIBe 명령을 사용하여 뷰의 구조를 표시한다.
오라클 디비 예제 :
CESCRIBE empuv80
☞설명) 뷰 생성
예제는 부서 80에 있는 각 사원의 사원 번호, 이름 및 급여를 포함하는 뷰를 생성한다.
iSQL*Plus의 DESCRIBE명령을 사용하여 뷰의 구조를 표시할 수 있다.
뷰 생성 지침 :
․ 뷰를 정의하는 서브 쿼리는 조인,그룹,서브 쿼리 등의 복합 SELECT 구문을 포함 할 수 있다.
․ 뷰를 정의하는 서브 쿼리는 ORDER BY 절을 포함할 수 없다.
ORDER BY 절은 뷰에서 데이터를 검색할 때 지정한다.
․ WITH CHECK OPTION을 사용하여 생성한 뷰의 제약 조건 이름을 지정하지 않으면 SYS_Cn 형식의 기본 이름이 지정된다.
․ OR REPLACE 옵션을 사용하면 뷰를 삭제하여 다시 생성하거나 이전에 부여 받은 객체 권한을 다시 부여 하지
않고도 뷰의 정의를 변경할 수 있다.
서브 쿼리에 열 별칭을 사용하여 뷰를 생성합니다.
주어진 별칭 이름을 사용하여 이 뷰에서 열을 선택한다.
서브 쿼리에 열 별칭을 포함시켜 열 이름을 제어할 수 있다.
오라클 디비 예제 :
CREATE VIEW salvu50
AS SELECT employee_id ID_NUMBER,
last_nane NAME,
salary*12 ANN_SALARY
FROM employees
WHERE department_id = 50;
View created.
☞설명)
예제는 부서 50의 모든 사원에 대해 별칭이 ID_NUMBER인 사원번호(EMPLOYEE_ID), 별칭이 NAME인 이름(LAST_NAME),
별칭이 ANN_SALARY인 연봉(SALARY)을 포함하는 뷰를 생성한다.
또는 별칭을 CREATE문 뒤이면서 SELECT 서브 쿼리 앞인 위치에 사용할 수도 있다.
나열되는 별칭의 수는 서브 쿼리에서 선택되는 표현식의 수와 일치해야 한다.
MSSQL 디비 예제 :
CREATE view salvu50
AS
SELECT emp_id ID_NUMBER, lname NAME, job_lvl * 12 ANN_SALARY
FROM employee
WHERE pub_id = 0877
또는
CREATE view salvu50
(ID_NUMBER, NAME, ANN_SALARY)
AS
SELECT emp_id , lname , job_lvl * 12
FROM employee
WHERE pub_id = 0877
sp_columns salvu50
sp_helptext salvu50 --뷰 상세 내용 확인
SELECT * FROM salvu50
SELECT employee_id, last_name, salary*12
FROM employyes
WHERE department_id = 50;
View created