본문 바로가기
  • Coding & Book
학습단/SQL 학습단

혼공스 15일차(가상의 테이블 뷰)

by 루이3 2023. 7. 28.

  • 뷰는 데이터 베이스 개체 중 하나 입니다.
  • 뷰의 실체는 SELECT 문으로 만들어져 있어 접근하는 순간 SELECT문이 실행되고 그결과가 화면에 출력됩니다.
  • 뷰는 단순뷰와 복합뷰로 나뉩니다.
  • 단순 뷰는 하나의 테이블과 연관된 뷰를 말합니다.
  • 복합 뷰는 2개 이상의 테이블과 연관된 뷰를 말합니다.

 

뷰를 사용하는 이유

  • 보안에 도움이 됩니다.
  • 복잡한 SQL을 단순하게 만들수 있습니다.
  • 윈도우의 바로가기 아이콘과 비슷합니다.

 

뷰 만드는 형식

  • 뷰를 만드는 형식은 아래와 같습니다.
CREATE VIEW 뷰_이름
AS
	SELECT 문;

 

뷰에 접근하는 방식

  • 테이블과 동일하게 SELECT문을 사용합니다.
SELECT 열_이름 FROM 뷰_이름
	[WHERE 조건];

 

 

예시로 전에 했던 market_db에서 회원테이블의 아이디,이름, 주소에 접근하는 뷰를 생성해보겠습니다.

USE market_db;
CREATE VIEW v_member
AS
    SELECT mem_id, mem_name, addr FROM member;

 

 

뷰의 생성

  • 뷰에서 사용될 열 이름을 테이블과 다르게 할수 있습니다.
  • 열 이름 뒤에 작은 따옴표 또는 큰따옴표로 묶은후 형식상 AS를 붙여주면됩니다.
  • AS를 붙여주는 이유는 코드가 명확해 보이는 장점이 있기 때문입니다.
  • 열이름에 공백이 있는 뷰를 조회할때는 백틱(`)으로 묶어줘야 합니다. 
USE market_db;
CREATE VIEW v_exam
AS
	...

 

뷰의 수정

  • 뷰의 수정은 ALTER VIEW 구문을 사용합니다.
  • 열이름에 한글을 사용해도 됩니다.
ALTER VIEW v_exam
AS
	...

 

뷰의 삭제

  • 뷰의 삭제는 DROP VIEW를 사용합니다.
DROP VIEW v_exam;

 

뷰의 정보 확인

  • DESCRIBE 문으로 기존 뷰의 정보를 확인할 수 있습니다.
  • 주의할점으로 PRIMARY KEY등의 정보는 확인되지 않습니다.
  • SHOW CREATE VIEW문으로 뷰의 소스코드도 확인할 수 있습니다.
DESCRIBE v_member;

 

뷰를 통해 데이터 수정/삭제

  • 뷰를 통해서 데이터 수정이 가능합니다.
  • 아래 코드를 통해 수정이 되시는것을 확인할 수 있습니다.
UPDATE v_member SET addr = '부산' WHERE mem_id='BLK' ;

 

데이터를 입력해보겠습니다.

뷰가 참조하는 테이블의 열 중 mem_number는 NOT NULL 이므로 값을 입력해줘야 하는데
값을 입력할 방법이 없습니다. 따라서 뷰를 새로 만들어 주겠습니다.(이름은 v_member1)

USE market_db;
CREATE VIEW v_member1
AS
    SELECT mem_id, mem_number, mem_name, addr FROM member;

 

만든 후에 방탄소년단 을 넣어주겠습니다.

INSERT INTO v_member1(mem_id, mem_number, mem_name, addr) VALUES('BTS', 1, '방탄소년단','경기') ;

넣으시고 확인해주시면 방탄소년단 이름이 들어간것을 확인 할수 있습니다.

 

 

뷰를 통한 데이터의 입력

  • 뷰를 사용하다보면 예상치 못한 경로에서 입력되면 안되는 데이터들이 입력되는 경우가 있습니다.
  • 이를 해결하기 위해 WITH CHECK OPTION을 사용해주시면 됩니다.

 

아래 코드는 키 165 이상만 있는 뷰 입니다.

CREATE VIEW v_height165
AS
    SELECT * FROM member WHERE height >= 165 ;    
SELECT * FROM v_height165 ;

 

여기에 키 160 데이터를 넣어 보겠습니다.

INSERT INTO v_height165 VALUES('TRA','티아라', 10, '서울', NULL, NULL, 160, '2005-01-01') ;

 

데이터가 입력 된것은 확인 할수 있지만 보이지는 않습니다.

 

 

이를 해결하기 위해 WITH CHECK OPTION 을 사용해주겠습니다.

ALTER VIEW v_height165
AS
    SELECT * FROM member WHERE height >= 165
        WITH CHECK OPTION ;
        
INSERT INTO v_height165 VALUES('IM','아이언맨', 11, '뉴욕', NULL, NULL, 163, '2002-01-01') ;

 

이번에는 오류 메시지가 뜨는것을 확인할수 있습니다.

 

 

뷰가 참조하는 테이블의 삭제

  • 뷰가 참조하는 테이블을 삭제해보겠습니다
  • 아래 코드를 입력해주시면 됩니다.
DROP TABLE IF EXISTS buy, member;

 

 

뷰의 상태 확인

  • 뷰의 상태를 CHECK TABLE 문으로 확인할수 있습니다.
  • 아래 코드를 입력하시면 참조하는 테이블이 없어 오류가 나는것을 확인할수 있습니다.
CHECK TABLE v_height165;