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문
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, 큐브리드 로드 형식으로 받을 수 있다.
해당 뷰를 삭제한다. 다음 구문과 같은 기능을 수행한다.
뷰 이름 변경
현재 뷰의 이름을 변경할 수 있다.
해당 뷰를 더블 클릭하면 해당 뷰의 스키마 구성 정보를 조회해 볼 수 있다.
|