※ 뷰(view) : 하나 이상의 테이블을 합하여 만든 가상의 테이블
☞ 장점
· 편리성 및 재사용성 : 자주 사용되는 복잡한 질의를 뷰로 미리 정의해 놓을 수 있음 → 복잡한 질의를 간단히 작성
· 보안성 : 각 사용자별로 필요한 데이터만 선별하여 보여줄 수 있음. 중요한 질의의 경우 질의 내용을 암호화할 수 있음 → 개인정보(주민번호)나 급여, 건강 같은 민감한 정보를 제외한 테이블을 만들어 사용
· 독립성 제공 : 미리 정의된 뷰를 일반 테이블처럼 사용할 수 있기 때문에 편리함. 또 사용자가 필요한 정보만 요구에 맞게 가공하여 뷰로 만들어 쓸 수 있음 → 원본테이블이 구조가 변하여도 응용에 영향을 주지 않도록 하는 논리적 독립성 제공
☞ 뷰의 특징
· 원본 데이터 값에 따라 같이 변함
· 독립적인 인덱스 생성이 어려움
· 삽입, 삭제, 갱신 연산에 많은 제약이 따름
1) 뷰의 생성
① 기본 문법
CREATE VIEW 뷰이름[(열이름 [, ...n])]
AS SELECT 문
▶Book 테이블에서 '축구'라는 문구가 포함된 자료만 보여주는 뷰
SELECT *
FROM Book
WHERE bookname LIKE '%축구%';
▶ 위 SELECT 문을 이용해 작성한 뷰 정의문
CREATE VIEW vw_Book
AS SELECT *
FROM Book
WHERE bookname LIKE '%축구%';
▶ 주소에 '대한민국'을 포함하는 고객들로 구성된 뷰를 만들고 조회하시오 단, 뷰의 이름은 vw_Customer로 한다
CREATE VIEW vw_Customer
AS SELECT *
FROM Customer
WHERE address LIKE '%대한민국%';
<결과 확인>
SELECT *
FROM vw_Customer;
▶ Orders 테이블에 고객이름과 도서이름을 바로 확인할 수 있는 뷰를 생성한 후, '김연아' 고객이 구입한 도서의 주문번호, 도서이름, 주문액을 보이시오
CREATE VIEW vw_Orders (orderid, custid, name, bookid, bookname, saleprice, orderdate)
AS SELECT od.orderid, od.custid, cs.name, od.bookid, bk.bookname, od.saleprice, od.orderdate
FROM Orders od, Customer cs, Book bk
WHERE od.custid = cs.custid AND od.bookid = bk.bookid;
<결과 확인>
SELECT orderid, bookname, saleprice
FROM vw_Orders
WHERE name = '김연아';
2) 뷰의 수정
· 기본 문법
CREATE OR REPLACE VIEW 뷰이름 [(열이름 [, ...n])]
AS SELECT 문
▶ 뷰 vw_Customer는 주소가 대한민국인 고객을 보여준다. 이 뷰를 영국을 주소로 가진 고객으로 변경하시오. phone 속성은 필요 없으므로 포함시키지 마시오
CREATE OR REPLACE VIEW vw_Customer (custid, name, address)
AS SELECT custid, name, address
FROM Customer
WHERE address LIKE '%영국%';
<결과 확인>
SELECT *
FROM vw_Customer;
3) 뷰의 삭제
· 기본 문법
DROP VIEW 뷰이름[, ...n];
▶ 앞서 생성한 뷰vw_Customer를 삭제하시오
DROP VIEW vw_CUstomer;
<결과 확인>
SELECT *
FROM vw_Customer;