혼자 공부하는 SQL 14강

랄라콥스·2025년 2월 21일

혼자공부하는SQL

목록 보기
6/12

VIEW

= 가상의 테이블

데이타베이스 개체 중에 하나
'바로가기'와 같은 역할
실체는 없지만, 테이블과 연결되어있는 것

사용자의 입장에서는 테이블과 다르게 보이지 않음!

생성 방법

CREATE VIEW 뷰_이름
AS
	SELECT 문;

뷰이름을 v_tableName으로 지어주면 좋다

사용하는 이유

보안에 도움이 된다

테이블의 모든 정보가 담기는 것이 아닌 사용자에게 보여주고 싶은 정보를 필터링해서 보여줄 수 있음
-> 중요한 정보를 사용자에게 안 보여줄 수 있음

사용자별로 권한 접근을 달리해서 뷰만 보여주게 하면 됨

복잡한 SQL문을 단순하게 만들 수 있다

매번 몇몇 속성만 SELECT해서 사용하지 않고, 해당 정보만 담은 VIEW 만들면 굉장히 간편하다!

SELECT B.mem_id, M.mem_name, B.prod_name, M.addr, 
        CONCAT(M.phone1, M.phone2) '연락처' 
   FROM buy B
     INNER JOIN member M
     ON B.mem_id = M.mem_id;

-> view 생성

CREATE VIEW v_memberbuy
AS
    SELECT B.mem_id, M.mem_name, B.prod_name, M.addr, 
            CONCAT(M.phone1, M.phone2) '연락처' 
       FROM buy B
         INNER JOIN member M
         ON B.mem_id = M.mem_id;

-> 사용

SELECT * FROM v_memberbuy WHERE mem_name = '블랙핑크';

VIEW의 작동

  • 열 이름을 바꿔서(별칭) 사용 할 수 있음
CREATE VIEW v_viewtest1
AS
    SELECT B.mem_id 'Member ID', M.mem_name AS 'Member Name', 
            B.prod_name "Product Name", 
            CONCAT(M.phone1, M.phone2) AS "Office Phone" 
       FROM buy B
         INNER JOIN member M
         ON B.mem_id = M.mem_id;

주의점

SELECT  DISTINCT `Member ID`, `Member Name` FROM v_viewtest1;

띄엄쓰기가 있으면, 백틱을 사용해야함!!

view 테이블 삭제는 DROP

VIEW의 특성

update 가능

insert 불가의 경우

대체로 view에는 실제 테이블에서 몇몇 속성만 담고 있음
= data insert 할 때 반드시 넣어야 할 정보는 넣을 수 없게 됨
= insert 안됨

  • 전체 테이블과 동일한 속성을 가지고 있다면 입력됨
INSERT INTO v_member(mem_id, mem_name, addr) VALUES('BTS','방탄소년단','경기') ;

-> 결과

사유:

회원 테이블 입력 할 때 반드시 필요한 인원과 주소가 insert 안됨

data insert check option

ALTER VIEW v_height167
AS
    SELECT * FROM member WHERE height >= 167
        WITH CHECK OPTION ;

이런식으로 해당 view의 특성을 따르는 옵션을 추가해주기

기존 table 삭제

테이블 삭제 -> view 볼 수 없음
=> 참조해야할 테이블이 없기 때문

profile
일단 책을 피자

0개의 댓글