티스토리 뷰

카테고리 없음

큐브리드 : VIEW

토르웰 2011. 3. 6. 18:07

뷰(View)  


뷰는 하나의 가상 테이블(virtual table)을 의미한다. 가상 테이블은 실제로 레코드를 갖지 않는 테이블이라는 뜻이다. 기존의 테이블의 레코드들은 데이터베이스에 물리적으로 저장되지만, 뷰는 기존의 테이블이나 또 다른 뷰에 대한 SELECT문의 형태로 정의된다.

뷰를 정의하는 SQL문의 구문은 다음과 같다.

CREATE VIEW 뷰이름 [(칼럼들)] 
AS SELECT 문 
[ WITH CHECK OPTION ]



WITH CHECK OPTION은 뷰에 레코드를 삽입하거나 갱신할 때 뷰의 SELECT절 조건에 해당하는 데이터만 입력될 수 있도록 한다.



SQL문을 이용한 뷰의 정의 및 관리  

예제 1
문제
nation 테이블에서 continent(대륙)이 ‘Asia’인 국가들만 보여주는 뷰를 정의하고자 한다. 국가 코드, 국가 명, 국가 수도로 구성된 view_nation을 정의하되, 각 컬럼의 이름은 view_code, view_name, view_capital로 지정하고, 정의한 뷰를 조회하라.

VIEW 생성 SQL문
CREATE VIEW view_nation (view_code, view_name, view_capital)
     AS SELECT code, name, capital
     FROM nation
     WHERE continent='Asia';


VIEW 출력 SQL문
SELECT * FROM view_nation;


결과 테이블
no
view_code
view_name
view_capital
25
MAS
Malaysia
Kuala Lumpur
26
LIB
Lebanon
Beirut
27
LAO
Lao People's Democratic Republic
Vientiane
28
KUW
Kuwait
Kuwait City
29
KSA
Saudi Arabia
Riyadh
30
KOR
Korea
Seoul
31
KGZ
Kyrgyzstan
Bishkek
32
KAZ
Kazakhstan
Astana
33
JPN
Japan
Tokyo

설명
뷰는 특정 데이터베이스 사용자가 일부의 데이터만 질의하도록 제한 할 수 있으므로 보안 목적으로 사용할 수도 있다.


예제 2
문제
[예제 1]에서 정의한 view_nation 뷰에 code가 ‘NKO’이고, name이 ‘North Korea’ 그리고 view_capital이 ‘Pyoung Yang’인 레코드를 삽입하고 뷰에서 조회하라.

데이터 삽입 SQL문
INSERT INTO view_nation
VALUES('NKO', 'North Korea', 'Pyoung Yang');


데이터 출력 SQL문
SELECT * FROM view_nation;


결과 테이블
no
view_code
view_name
view_capital
25
MAS
Malaysia
Kuala Lumpur
26
LIB
Lebanon
Beirut
27
LAO
Lao People's Democratic Republic
Vientiane
28
KUW
Kuwait
Kuwait City
29
KSA
Saudi Arabia
Riyadh
30
KOR
Korea
Seoul
31
KGZ
Kyrgyzstan
Bishkek
32
KAZ
Kazakhstan
Astana
33
JPN
Japan
Tokyo

설명
view_nation은 continent가 ‘Asia’인 국가 데이터 레코드만 조회하는 뷰이고, continent를 컬럼으로 가지고 있지 않기 때문에 본 예제의 INSERT문은 다음과 같이 번역되어 수행된다.

INSERT INTO nation(code, name, capital)
VALUES(‘NKO’, ‘North Korea’, ‘Pyoung Yang’);

이 뷰를 통해서는 continent를 입력할 수 없으므로 nation 테이블의 continent 컬럼에는 NULL 값이 들어가게 된다. view_nation 뷰를 정의한 조건을 충족하지 않기 때문에 뷰를 통해서는 이 레코드가 나타나지 않게 된다. 이러한 문제는 WITH CHECK OPTION절을 이용하여 해결할 수 있다.

nation 테이블 조회 SQL문
SELECT * FROM nation WHERE code='NKO';


결과 테이블
no
code
name
continent
capital
1
NKO
North Korea
(NULL)
Pyoung Yang


예제 3
문제
[예제 1]에서 정의한 view_nation 뷰를 삭제한 후 WITH CHECK OPTION을 추가하여 뷰를 재정의하고 위에 추가했던 레코드를 그대로 추가하라.

view_nation 삭제 SQL문
DROP VIEW view_nation;


view_nation 재정의 SQL문
CREATE VIEW view_nation(view_code, view_name, view_capital)
     AS SELECT code, name, capital
     FROM nation WHERE continent='Asia'
     WITH CHECK OPTION;


데이터 삽입 SQL문
INSERT INTO view_nation
VALUES('NKO', 'North Korea', 'Pyoung Yang');


결과 화면

설명
WITH CHECK OPTION과 함께 뷰를 정의하면 뷰는 데이터의 무결성을 유지하는데 사용될 수 있다. WITH CHECK OPTION은 뷰를 통해 조회할 수 없는 레코드들을 INSERT문과 UPDATE문이 생성할 수 없도록 보장한다.


예제 4
문제
nation 테이블과 participant 테이블을 조인하여 연도별 메달 개수와 국가 명을 하나의 테이블처럼 조회할 수 있는 뷰, view_nation_info를 정의하고 레코드가 삽입이 되는지 확인하라.

view_nation_info 생성 SQL문
CREATE VIEW view_nation_info
AS SELECT p.host_year, n.name, p.gold, p.silver, p.bronze
FROM nation n, participant p
WHERE n.code = p.nation_code;


데이터 삽입 SQL문
INSERT INTO view_nation_info
VALUES(2012, 'London', 30, 20, 10);


결과 화면

설명
본 예제와 같이 두 개 이상의 테이블을 이용하여 조인한 뷰는 뷰에 대한 갱신이 기본 테이블들에 대한 갱신으로 정확하게 대응되지 않을 가능성이 있기 때문에 데이터 갱신을 허용하지 않는다. 이 밖에도 뷰에 기본 키가 포함되지 않은 경우, 뷰에 포함되지 않은 기본 테이블의 컬럼 중에 NOT NULL 제약 조건을 가진 경우, 뷰에 집단 함수가 포함된 경우에는 갱신을 허용하지 않는다.



큐브리드 매니저를 이용한 뷰 관리  


뷰 추가

탐색 트리의 [뷰]를 마우스 오른쪽 클릭해서 [뷰 추가]를 선택한다.


뷰 이름과 소유자를 설정한 후, [추가] 버튼을 클릭하고 새로 생성할 뷰에 대한 질의를 작성한다. 뷰 추가 마법사를 통해 작성한 내용은 [SQL문] 탭에서 SQL 구문으로 확인해 볼 수 있다.


탐색 트리의 각 뷰를 마우스 오른쪽 버튼을 클릭하여 [전체 조회]를 선택하면 수행할 수 있다. 또는 [질의 편집기]가 열려 있을 때 질의 편집기의 편집 창 또는 결과 창에 해당 뷰를 끌어 놓아서 수행할 수 있다. 수행하면 새로운 질의 편집기가 열리면서 전체 데이터를 조회한다.

해당 뷰의 전체 데이터 개수를 조회한다. 다음 구문과 같은 기능을 수행한다.

SELECT COUNT(*) FROM view;



데이터 내려 받기

데이터 내려 받기 기능을 통해서 해당 뷰의 모든 데이터를 엑셀, CSV, SQL, 큐브리드 로드 형식으로 받을 수 있다.





해당 뷰를 삭제한다. 다음 구문과 같은 기능을 수행한다.

DROP FROM view;



뷰 이름 변경

현재 뷰의 이름을 변경할 수 있다.






해당 뷰를 더블 클릭하면 해당 뷰의 스키마 구성 정보를 조회해 볼 수 있다.

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크