기록공간

OracleSQL - 뷰(VIEW) 본문

DataBase/Oracle

OracleSQL - 뷰(VIEW)

입코딩 2020. 10. 18. 13:46
반응형

뷰(VIEW) 란?

뷰란 이미 특정한 데이터베이스 내에 존재하는 하나 이상의 테이블에서 사용자가 얻기 원하는 데이터들만을 정확하고 편하게 가져오기 위하여 사전에 원하는 컬럼들만을 모아서 만들어놓은 가상의 테이블이다. 뷰의 사용에는 편의성 및 보안에 목적이 있다.

 

가상의 테이블이란, 뷰가 실제로 존재하는 테이블(객체)이 아니라 하나 이상의 테이블에서 파생된 또 다른 정보를 볼 수 있는 방법이며 그 정보를 추출해내는 SQL 문장이라고 볼 수 있다. 

 

기본 형식 및 구조는 다음과 같다.

 

-- [] 안에 있는 것들은 생략 가능

CREATE [OR REPLACE] VIEW 뷰이름 
[ (ALIAS[, ALIAS, ...]) ]
AS
서브쿼리(SUBQUERY)
[WITH CHECK OPTION]
[WITH READ ONLY]

뷰의 데이터는 물리적으로 저장되는게 아니다. 그저 뷰로 설정했었던 SQL 쿼리문이 돌아갈 뿐이다.

 

다음은 뷰 생성에 대한 예제이다. 

 

-- 관계를 가지는 여러 테이블에서 조인한 후 알맞은 데이터를 뽑아 뷰로 생성

-- ○ 뷰(VIEW) 생성
CREATE OR REPLACE VIEW VIEW_EMPLOYEES
AS
SELECT E.FIRST_NAME, E.LAST_NAME, D.DEPARTMENT_NAME, L.CITY
        , C.COUNTRY_NAME, R.REGION_NAME
FROM EMPLOYEES E, DEPARTMENTS D, LOCATIONS L, COUNTRIES C, REGIONS R
WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID
AND D.LOCATION_ID = L.LOCATION_ID
AND L.COUNTRY_ID = C.COUNTRY_ID
AND C.REGION_ID = R.REGION_ID;


--○ 뷰(VIEW)의 구조 조회
DESC VIEW_EMPLOYEES;
--==>>
/*    이름                    널?              유형
---------------           --------        ------------
FIRST_NAME                              VARCHAR2(20)
LAST_NAME             NOT NULL    VARCHAR2(25)
DEPARTMENT_NAME NOT NULL     VARCHAR2(30)
CITY                       NOT NULL     VARCHAR2(30)
COUNTRY_NAME                         VARCHAR2(40)
REGION_NAME                            VARCHAR2(25)
*/


--○ 뷰(VIEW) 소스 확인
SELECT VIEW_NAME, TEXT
FROM USER_VIEWS
WHERE VIEW_NAME = 'VIEW_EMPLOYEES';
--==>>
/* 
SELECT E.FIRST_NAME, E.LAST_NAME, D.DEPARTMENT_NAME, L.CITY 
        , C.COUNTRY_NAME, R.REGION_NAME 
FROM EMPLOYEES E, DEPARTMENTS D, LOCATIONS L, COUNTRIES C, REGIONS R 
WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID 
AND D.LOCATION_ID = L.LOCATION_ID 
AND L.COUNTRY_ID = C.COUNTRY_ID 
AND C.REGION_ID = R.REGION_ID;
*/

 

반응형

'DataBase > Oracle' 카테고리의 다른 글

OracleSQL - PL/SQL 함수(FUNCTION)  (0) 2020.10.18
OracleSQL - PL/SQL  (0) 2020.10.18
OracleSQL - 무결성 제약조건(Constraint)  (0) 2020.10.18
OracleSQL - JOIN  (0) 2020.10.10
OracleSQL - ROW_NUMBER  (0) 2020.10.10
Comments