개발자에게 필요한 만큼만 기존 테이블에서 추출해서 가상의 테이블을 만드는데 그것을 VIEW 라고 한다.
즉, 실제 데이터를 가지고 있지 않고, 원본 테이블을 참조해서 보여주는 용도로 보여지는건 실제 테이블(베이스 테이블)의 값이다.
이러한 조회 쿼리가 있다고 하자.
SELECT
menu_name
, menu_price
FROM tbl_menu;
이것을 뷰로 가상 테이블을 만들 수 있다.
CREATE VIEW v_menu
AS
SELECT
menu_name
, menu_price
FROM tbl_menu;
이렇게 만들면 VIEW는 위의 SELECT 조회 쿼리만 저장하고 있는 것이다.
즉, 데이터를 가지고 있지 않고, SELECT 조회 쿼리만 저장하고 잇는 것이다.
ex) 매크로
매크로라고 해서 마구마구 쓰는게 아니다.
1. DBA가 개발자가 보여주고 싶은 것만 추출해서 보여줄 때 사용
아까 만든 view를 지우고 별칭을 달아서 다시 만들어서 조회한다.
DROP VIEW v_menu;
CREATE VIEW v_menu
AS
SELECT
menu_name AS '메뉴명'
, menu_price AS '메뉴단가'
FROM tbl_menu;
SELECT * FROM v_menu;
그럼 view를 계속 지웠다가 할 수는 없기 때문에
replace를 달아주면 편하다.
CREATE or REPLACE VIEW v_menu
AS
SELECT
menu_name AS '메뉴명'
, menu_price AS '메뉴단가'
FROM tbl_menu;
DML 작업을 VIEW를 이용해서 해서는 안 된다.
그럼에도 view를 통한 DML을 보기는 하자. (실제 사용하는건 좋지 않다.)
tbl_menu 에서 한식에 대한 view를 만든다.
CREATE OR REPLACE VIEW hansik
AS
SELECT
menu_code
, menu_name
, menu_price
, category_code
, orderable_status
FROM tbl_menu
WHERE category_code = 4;
SELECT * FROM hansik;

여기에 hansik view에 데이터를 삽입해보자.
INSERT
INTO hansik
VALUES
(NULL, '식혜맛국밥', 5500, 4, 'Y');
SELECT * FROM hansik;

hansik 이라는 view를 통해 tbl_menu라는 베이스 테이블에 영향을 준다.
진짜인지 확인해보자.
SELECT * FROM tbl_menu;

이번엔 view를 통해 update도 해보자.
UPDATE hansik
SET menu_name = '버터맛국밥'
, menu_price = 6000
WHERE menu_name = '식혜맛국밥'

ex) 그룹함수를 사용한 경우
CREATE OR REPLACE VIEW v_test
AS
SELECT
AVG(menu_price) + 3
FROM tbl_menu;
SELECT * FROM v_test;

VIEW는 데이터를 쉽게 읽고 이해할 수 있도록 돕는 동시에, 원본 데이터의 보안을 유지하는데 도움이 된다.