본문 바로가기
IT/SQL

[MySQL] 뷰 (VIEW) 만들기

by marketinkerbell 2022. 2. 1.
반응형

 

:

조인 등의 작업을 해서 만든 '결과 테이블' 이 가상으로 저장된 형태

일시적으로 생성한 결과 테이블을 저장해둔 것

 

뷰(VIEW)는 가상테이블이라고도 한다.

 

 

#AS 뒤에 나오는 쿼리문의 결과 테이블을 VIEW 로 저장하라

CREATE VIEW  three_tables_joined AS
SELECT i.id, i.name, AVG(star) AS avg_star, COUNT(*) AS count_star
FROM item AS i LEFT OUTER JOIN review AS r ON r.item_id = i.id
    LEFT OUTER JOIN member AS m ON r.mem_id = m.id
WHERE m.gender = 'f'
GROUP BY i.id, i.name
HAVING COUNT(*) >= 2
ORDER BY AVG(star) DESC, COUNT(*) DESC;

 

 

저장하면 아래와 같이 Views 테이블에 생성된 것 확인 가능

 

이제 이 three_tables_joined 라는 가상 테이블을 마치 원래 부터 존재했던 테이블인 것 처럼 사용하면 된다.

 

 

조인을 하거나 서브쿼리를 중첩해서 써서 복잡하고 길게 쓰던 쿼리문을

이렇게 뷰를 사용함으로 간단하게 테이블 이름만 가져다가 쓸 수 있어서 좋다.

 

자주 쓰는 결과 테이블이 있다면 '뷰' 로 저장해 두고 사용하면 좋다. 

 

 

 

 

뷰와 그냥 테이블은 무슨 차이가 있는 걸까?


가장 큰 차이는 뷰는 테이블과 달리 데이터가 물리적으로 컴퓨터에 저장되어 있는 건 아니라는 점이다.

 

뷰는, 우리가 뷰를 사용할 때, DBMS가 그 뷰를 생성하는 SQL 문을 재실행하는 방식으로 가상의 테이블을 만들어준다.

뷰를 사용할 때마다 AS 다음에 있는 SQL문이 재실행 된다는 뜻이다.

 

 

 

 

 

뷰의 장점?

 

1. 뷰를 이용해서 각 직무별 데이터 수요에 알맞은, 다양한 구조의 데이터 분석 기반을 구축해둘 수 있다.

같은 테이블들이 존재하는 상황에서도, 직무에 따라, 상황에 따라, 필요로 하는 데이터의 종류와 그 구조가 사람마다 다를 수 있다. 뷰를 사용하면 각자에게 적합한 구조로 데이터들을 준비해둘 수 있기 때문에 회사 입장에서도 기존의 테이블 구조를 건드리지 않고, 풍부한 데이터 분석 기반을 준비할 수 있게 된다.

 

 

2. 뷰는 데이터 보안을 제공한다.

 

예를 들어, 회사에서 직원들에 관한 정보를 담고 있는 employee라는 테이블이 있고 이 테이블에는 굉장히 민감한 정보가 담긴 컬럼들이 있다고 가정하자.  예를 들어, 주민등록번호나 주소, 연봉 등과 같은 정보가 있다. 그런데 회사 내의 데이터 분석가가 어떤 분석을 하기 위해 이 employee 테이블이 필요할 수도 있다.  이때 분석가에게 민감 정보가 담긴 컬럼을 제외하고 보여줄 수 있는 방법도 바로 '뷰' 이다. 

예를 들어, employee 테이블에 id, name, age, department, registration_number(주민등록번호), annual_salary(연봉) 컬럼이 있다고 가정했을 때, 

이런 상황에서는  주민번호, 연봉 칼럼은 제외시킨 뷰를 만든다.

CREATE VIEW emp_view AS 

SELECT id, name, age, department FROM employee;
같은 SQL 문을 실행해서 테이블과 비슷한 이름의 뷰를 만드는 게 좋다. 

 


특정 column들 뿐만 아니라 특정 row들을 공개하지 않는 것도 가능하다. 

예를 들어 department의 값이 'secret'인 직원들의 정보를 공개하지 않아야 한다고 가정해보자.

 


CREATE VIEW emp_view2 AS 

SELECT id, name, age, department FROM employee 

WHERE department != 'secret';
이렇게 WHERE 절로 조건을 붙여서, 특정 row들만 보여주는 뷰를 만드는 것도 가능하다.  

이런 SQL 문을 사용해서, 공개 가능한 정보만 있는 뷰를 만들고 난 후에는, 

데이터 분석가가 employee 테이블에 직접적인 접근을 하지 못하도록 막고(DBMS에서 '사용자별 권한 관리' 기능을 통해 할 수 있다), emp_view 뷰에만 접근할 수 있도록 하면 된다. 

 

 

 

 

 

 

댓글