[SQL] - 뷰

유현민·2022년 3월 19일
0

SQL

목록 보기
29/34

1. 뷰

CREATE VIEW 뷰_이름
AS
SELECT 문;
  • 뷰를 만든 후에 뷰에 접근하는 방식은 테이블과 동일하게 SELECT 문 사용
USE market_db;
CREATE VIEW v_member
AS
SELECT mem_id, mem_name, addr FROM member;

  • 조건식 가능
SELECT mem_name, addr FROM v_member
WHERE addr IN('서울', '경기');

2. 뷰를 사용하는 이유

  • 보안에 도움이 된다
    개인 정보가 보이지 않는 뷰를 생성해서 사용 가능

  • 복잡한 SQL을 단순하게 만들 수 있다.
    자주 사용하는 쿼리가 있다고 뷰로 생성해놓는다.

3. 뷰의 실제 작동

  • 뷰 생성

뷰를 조회할 떄 열 이름에 공백이 있으면 백틱(`)으로 묶어야함

USE market_db;
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;


  • 뷰 수정
ALTER VIEW v_viewtest1
AS
SELECT b.mem_id '회원 아이디', m.mem_name AS '회원 이름',
b.prod_name "제품 이름",
CONCAT(m.phone1, m.phone2) AS '연락처'
FROM buy b
INNER JOIN member m
ON b.mem_id = m.mem_id;

SELECT DISTINCT `회원 아이디`, `회원 이름` FROM v_viewtest1;

  • 뷰 삭제
DROP VIEW v_viewtest1;
  • 뷰 정보 확인

CREATE O REPLACE VIEW는 기존에 뷰가 있어도 덮어쓰는 효과를 낸다

USE market_db;
CREATE OR REPLACE VIEW v_viewtest2
AS
SELECT mem_id, mem_name, addr FROM member;

DESCRIBE V_VIEWTEST2;

뷰 소스코드 확인

SHOW CREATE VIEW V_VIEWTEST2;

  • 뷰를 통한 데이터의 수정/삭제
UPDATE v_member SET addr = '부산' where mem_id='BLK';

뷰를 통해서 데이터를 입력하려면, 뷰에서 보이지 않는 테이블의 열에 NOT NULL이 없어야 한다.

CREATE VIEW v_height167
AS
SELECT * FROM member WHERE height >= 167;

select * FROM v_height167;

키가 167 이상인 뷰이므로 167 이상의 데이터만 입력되도록 하려면 WITH CHECK OPTION 사용

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

INSERT INTO v_height167 VALUES('TOB', '텔레토비', 4, '영국', NULL, NULL, 140, '1995-01-01');

뷰가 참조하고 있어도 테이블은 삭제된다.

profile
smilegate megaport infra

0개의 댓글