《 뷰(VIEW) 》
데이터베이스 개체
가상의 테이블, 실체가 없음
바로가기 아이콘과 유사
《 VIEW의 프레임 》
CREATE VIEW < 뷰이름 >
AS
SELECT문;
《 VIEW를 사용하는 이유? 》
1) 보안에 도움이 된다(내가 보여주고 싶은 정보만 빼내서 보여줄 수 있다)
2) 쿼리를 단순하게 만들 수 있다
# 보안에 관한 내용 살펴보기
< Customer >
NUM | NAME | ID | PASSWORD | GRADE |
1 | Sole | remio | ********* | Gold |
· NUM : 고객번호
· NAME : 고객이름
· ID : 고객 ID
· PASSWORD : 고객 비밀번호
· GRADE : 회사에서 구매횟수에 따라 매긴 고객등급
Customer테이블은 회사가 고객의 모든 정보를 저장해두고 있는 테이블이다.
회사에서는 테이블의 구성을 바꾸지 않고 고객이 GRADE를 제외한 나머지 정보만 조회할 수 있도록 하고싶다.
VIEW는 GRADE를 제외한 아래와 같은 정보를 고객에게 제공할 수 있다.
NUM | NAME | ID | PASSWORD |
1 | Sole | remio | ********* |
# 쿼리 단순화 살펴보기
· 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;
· VEIW를 생성하고 데이터를 가져올 때
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를 생성하지 않는 게 편해보일지 모르지만, 2개 이상의 데이터를 복잡한 쿼리문을 사용해서 가져올 때는 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;
백틱(`)을 사용해야 한다.
《 DESCRIBE 》
CREATE OR REPLACE VIEW v_viewtest2
AS
SELECT mem_id, mem_name, addr FROM member ;
DESCRIBE v_viewtest2;
생성한 VIEW를 확인 가능
《 VIEW의 수정, 삭제, 삽입 》
UPDATE v_member
SET addr = '부산'
WHERE mem_id = 'BLK' ;
SELECT * FROM v_member
WHERE mem_id = 'BLK' ;
기입해야할 데이터와 그 자료형만 제대로 맞춘다면 view에는 수정, 삭제과 삽입이 가능하다.
수정과 삭제는 UPDATE문을 DELETE, INSERT문으로만 수정하면 되기 때문에 수정한다.
※ VIEW에서 실제 TABLE로의 접근은 불가능하다는 것을 알아두자
기준이 되는 테이블을 삭제하면?
DROP TABLE IF EXISTS buy, member;
SELECT * FROM v_height167;
view와 관계없이 table은 지울 수 있다.
check table을 사용해서 왜 view가 조회가 안되는지 확인할 수 있다.
CHECK TABLE v_height167;
· 실행결과
0 row(s) affected
Error Code : 1356 View 'market_db.v_height167' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
'SQL' 카테고리의 다른 글
인덱스의 내부 작동 원리와 구조, 인덱스에서 데이터 검색하기 (0) | 2023.05.06 |
---|---|
인덱스의 개념과 장단점, 클러스터형 인덱스와 보조 인덱스 (0) | 2023.05.05 |
SQL 테이블 제약조건(기본키, 외래키, 고유키) (1) | 2023.04.30 |
SQL 프로그래밍(스토어드 프로시저, IF문, CASE문, WHILE문, 동적SQL) (0) | 2023.04.09 |
두 테이블을 묶는 JOIN(INNER JOIN, OUTER JOIN, CROSS JOIN, SELF JOIN) (0) | 2023.03.27 |