SKN/02. DB

10. VIEW

claovy☘️ 2025. 2. 19. 14:49

1. VIEW

💡SELECT 쿼리문을 저장한 객체로 가상테이블이라고 불린다. 실질적인 데이터를 물리적으로 저장하고 있지 않고 쿼리만 저장했지만 테이블을 사용하는 것과 동일하게 사용할 수 있다. VIEW는 데이터를 쉽게 읽고 이해할 수 있도록 돕는 동시에, 원본 데이터의 보안을 유지하는데 도움이 된다.

 

01. VIEW 생성

# view 생성 후 조회
SELECT * FROM tbl_menu;

-- VIEW 생성
CREATE VIEW hansik AS
SELECT 
	menu_code, menu_name, menu_price, category_code, orderable_status
FROM 
	tbl_menu 
WHERE 
	category_code = 4;

-- 생성된 VIEW 조회
SELECT * FROM hansik;
# 베이스 테이블의 정보가 변경되면 VIEW의 결과도 같이 변경됨
INSERT INTO tbl_menu VALUES (null, '식혜맛국밥', 5500, 4, 'Y');
SELECT * FROM hansik;

 

 

2. VIEW를 통한 DML

[INSERT]

  • VIEW는 AUTO_INCREMENT가 없으므로 pk 컬럼의 값을 지정해 주어야 한다.
-- INSERT INTO hansik VALUES (null, '식혜맛국밥', 5500, 4, 'Y');    -- 에러 발생
INSERT INTO hansik VALUES (99, '수정과맛국밥', 5500, 4, 'Y');   
SELECT * FROM hansik;
SELECT * FROM tbl_menu;

 

[UPDATE]

  • VIEW를 통한 UPDATE 이후 VIEW 조회 및 베이스 테이블 조회
UPDATE hansik SET menu_name = '버터맛국밥', menu_price = 5700 WHERE menu_code = 99;
SELECT * FROM hansik;
SELECT * FROM tbl_menu;

 

 

[DELETE]

  • VIEW를 통한 DELETE 이후 VIEW 조회 및 베이스 테이블 조회
DELETE FROM hansik WHERE menu_code = 99;
SELECT * FROM hansik;
SELECT * FROM tbl_menu;

 

3. VIEW로 DML 명령어 조작이 불가한 경우

  • 사용된 SUBQUERY에 따라 DML 명령어로 조작이 불가할 수 있다.
    1. 뷰 정의에 포함되지 않은 컬럼을 조작하는 경우
    2. 뷰에 포함되지 않은 컬럼 중에 베이스가 되는 테이블 컬럼에 NOT NULL 제약 조건이 지정된 경우
    3. 산술 표현식이 정의된 경우
    4. JOIN을 이용해 여러 테이블을 연결한 경우
    5. DISTINCT를 포함한 경우
    6. 그룹 함수나 GROUP BY 절을 포함한 경우

4. VIEW 삭제

  • VIEW에 쓰인 SUBQUERY 안에 연산 결과 컬럼도 사용 가능하다.
DROP VIEW hansik;
  • OR REPLACE 옵션
    • 테이블을 DROP하지 않고 기존의 VIEW를 새로운 VIEW로 쉽게 다룰 수 있다.
CREATE OR REPLACE VIEW hansik AS
SELECT 
	menu_code AS '메뉴코드', menu_name '메뉴명', category_name '카테고리명'
FROM 
	tbl_menu a
JOIN tbl_category b ON a.category_code = b.category_code
WHERE 
	b.category_name = '한식';

SELECT * FROM hansik;

'SKN > 02. DB' 카테고리의 다른 글

12. 백업 및 복원  (0) 2025.02.19
11. STORED PROCEDURE / Trigger  (0) 2025.02.19
09. INDEX  (0) 2025.02.19
08. CONSTRAINTS  (0) 2025.02.19
07. DDL(Data Definition Language)  (0) 2025.02.19