DBMS

[DBMS] View

shb 2022. 2. 24. 12:00

View 가상테이블

View 란
- 가상의 테이블
- 실제 Table 에는 데이터가 있지만, View에는 데이터는 없고 SQL만 저장
- View에 접근할 때는 View에 들어있던 SQL의 수행된 결과를 가져오는 것
- View를 사용하는 목적
  - 보안 : 특정 테이블의 특정 column이 보여지면 안되는 경우
  - 편의성 : 가령 여러개의 테이블 join 하는게 매번 귀찮을 때 아예 그것을 view로 만들어 놓으면 편함.

 

View 종류

- 단순 View (Simple View)
- 복합 View (Complex View)
- 인라인 View (INLINE View)
- Materialized View (MView)

* 단순 View (Simple View)
View를 생성할 서브쿼리에 join 조건 안들어가고 1개의 테이블로 만들어지는 간단한 View.

* 뷰 생성 구문
CREATE [OR REPLACE] VIEW 뷰명 [컬럼명]
AS
(Sub Query)

SHOW tables;

SHOW FULL TABLES IN mydb111;

-- #8101
CREATE OR REPLACE VIEW v_prof
AS
SELECT profno, name, email, hpage FROM t_professor;

-- view 는 table 처럼 select 할수 있다.
SELECT * FROM v_prof;

 

* View 생성시 별도의 컬럼이름 가능

CREATE OR REPLACE VIEW v_prof(pfno, nm, em, hp)
AS
SELECT profno, name, email, hpage FROM t_professor;

-- #8102
CREATE OR REPLACE VIEW v_prof_dept
AS
SELECT p.profno "교수번호", p.name "교수명", d.dname "소속학과명"
FROM t_professor p, t_department d
WHERE p.deptno = d.deptno;


SELECT * FROM v_prof_dept; 


* 뷰 삭제
DROP VIEW v_prof;

* MySQL 에서 VIEW 목록 보기
SHOW FULL TABLES IN 테이블명
WHERE TABLE_TYPE LIKE 'VIEW';

* 복합 View
View SQL 의 서브쿼리에 여러개의 테이블이 Join 되어 생성.

* INLINE View (인라인 뷰)
View 는 한번 만들어 놓으면 계속 사용할수 있습니다.
그러나 1회용으로만 사용할 경우는 FROM 절의 서브쿼리 형태로 만들수 있습니다. 이러한 뷰를 Inline View 라 합니다.

-- #8103) 예제
-- t_student, t_department 테이블 : 
-- 학과별로 학생들의 최대키와 최대몸무게, 학과 이름을 출력하세요

SELECT 
	d.dname "학과명", s.max_height "최대키", s.max_weight "최대몸무게"
FROM
	(SELECT deptno1, max(height) "max_height", max(weight) "max_weight"
	FROM t_student GROUP BY deptno1) s, t_department d
WHERE 
	s.deptno1 = d.deptno;