SQL 12. 뷰

SQL 12. 뷰



1. 뷰

하나 이상의 테이블을 합해서 만든 가상의 테이블


- 뷰의 장점

편리성 및 재사용성 : 자주 사용되는 복잡한 질의를 뷰로 미리 정의해 놓을 수 있음. 복잡한 질의를 간단하게 작성할 수 있고 미리 정의된 뷰를 일반 테이블처럼 사용할 수 있음

보안성 : 각 사용자별로 필요한 데이터만 선별하여 보여줄 수 있음. 중요한 질의의 경우질의 내용을 암호화할 수 있음. 민감한 정보를 제외한 뷰를 만들어 사용 가능

논리적 데이터 독립성 : 개념 스키마의 데이터베이스 구조가 변해도 외무 스키마에 영향을 주지 않도록 하는 논리적 데이터 독립성 제공


- 뷰의 특징

원본 데이터 값에 따라 같이 변함

독립적인 인덱스 생성이 어려움

삽입, 삭제, 갱신 연산에 많은 제약이 따름




2. 뷰 생성

뷰는 실제 SQL 문에서 테이블과 동일하게 사용할 수 있는 데이터베이스 객체

뷰의 정의 = 뷰의 생성


CREATE VIEW [뷰 이름] ( [열 이름 나열 (생략 가능) ] )

AS [SELECT 문]

=> 해당 SELECT문의 결과를 뷰로 만들어줌



* 예시 - 도서이름에 '축구'가 들어간 도서들로 구성된 뷰 생성

CREATE VIEW Soccer_Book
AS SELECT *
FROM Book
WHERE bookname LIKE '%축구%';


-> 뷰 확인하기

SELECT *
FROM Soccer_Book;





-> 뷰를 테이블처럼 사용



* 예시 - 주소에 '대한민국'을 포함하는 고객들로 구성된 뷰 생성

CREATE VIEW vw_Customer
AS SELECT *
FROM Customer
WHERE address LIKE '%대한민국%'

-- 결과 확인
SELECT *
FROM vw_Customer





-> 열 이름에 대한 특별한 정의가 없으면 SELECT문의 열 이름을 그대로 가져와서 사용



* 예시 - 주문아이디, 고객아이디, 고객이름, 도서아이디, 도서이름, 가격, 판매날짜를 보여주는 뷰 생성

CREATE VIEW vw_Orders (orderid, custid, name, bookid, bookname, 
                                                saleprice, orderdate)
AS SELECT O.orderid, C.custid, C.name, B.bookid, B.bookname, 
                                             O.saleprice, O.orderdate
FROM Book B, Orders O, Customer C
WHERE O.custid = C.custid AND O.bookid = B.bookid


* 결과 확인 - '김연아'고객이 구입한 도서의 주문번호, 도서이름, 주문액








3. 뷰 수정


CREATE OR REPLACE VIEW [뷰 이름] ( [열 이름 나열 (생략 가능) ] )

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;








4. 뷰 삭제


DROP VIEW [뷰 이름]


* 예시 - vw_Customer 뷰 삭제

DROP VIEW vw_Customer;











 

댓글

이 블로그의 인기 게시물

Spring Boot 6. 계시판 프로젝트

Spring Boot 2. Maria 데이터베이스 & Spring Data JPA

Django 10. DB 연동