뷰
- 뷰는 데이터 베이스 개체 중 하나 입니다.
- 뷰의 실체는 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;
'학습단 > SQL 학습단' 카테고리의 다른 글
혼공스 16일차(인덱스) (0) | 2023.08.08 |
---|---|
4주차 완료 (0) | 2023.07.29 |
혼공스 14일차(제약조건으로 테이블을 견고 하게 만들기) (0) | 2023.07.27 |
혼공스 13일차(SQL로 테이블 만들기) (0) | 2023.07.26 |
혼공스 12일차(GUI환경에서 테이블 만들기) (0) | 2023.07.25 |