SQL - VIEW

김규린·2024년 8월 24일
0

Data Base

목록 보기
17/20

1. VIEW

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

1. VIEW 생성

-- view 생성	
CREATE or replace VIEW v_menu  -- or replace를 통해 덮어씌울 수 있다.
AS
SELECT
		menu_name '메뉴이름'
		, menu_price '메뉴가격'
	FROM tbl_menu;
	
SELECT * FROM v_menu;

-- view는 원본테이블을 참조해서 보여주는 용도이고 실제 보여지는건 원본 테이블의 데이터이다.

-- 원본인 tbl_menu의 11번 메뉴 가격을 10원으로 수정해보자
UPDATE tbl_menu
	SET menu_price = 10
 WHERE menu_code = 11;
 
-- v_menu(뷰)로 확인해 보자.
SELECT * FROM v_menu;

SELECT 메뉴이름 FROM v_menu; -- 뷰 생성시 별칭으로 생성헀다면 뷰틀 통한 조회는 별칭으로만 가능
  • 결과

    • SELECT * FROM v_menu;

    • SELECT 메뉴이름 FROM v_menu;

      별칭을 붙일 경우 컬럼의 기본 이름으로 조회할 경우 오류가 나오는데
      이는 CREATE를 하면서 별칭을 붙인 상태로 캡처가 되었다고 생각하면 됨.

      원본 테이블에 있는 데이터를 수정했더니 v_menu에서 확인했을 때도 수정한 데이터를 확인할 수 있었다.

  • 해당 쿼리를 저장해서 결과를 캡쳐 뜬 것처럼 사용

2. VIEW를 통한 DML

  • view를 통해서도 원본 테이블에 지장을 줄 수 있다.

1. VIEW를 통한 INSERT

-- INSERT INTO hansik VALUES (null, '식혜맛국밥', 5500, 4, 'Y');    -- 에러 발생
INSERT 
  INTO hansik
VALUES (99, '수정과맛국밥', 5500, 4, 'Y');   
SELECT * FROM hansik;
SELECT * FROM tbl_menu;

2. VIEW를 통한 UPDATE

UPDATE hansik
   SET menu_name = '버터맛국밥', menu_price = 5700 
 WHERE menu_code = 99;
SELECT * FROM hansik;
SELECT * FROM tbl_menu;

3. VIEW를 통한 DELETE

DELETE FROM hansik WHERE menu_code = 99;
SELECT * FROM hansik;
SELECT * FROM tbl_menu;

4. VIEW로 DML 명령어로 조작이 불가능한 경우(시험X)

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

5. VIEW 삭제

DROP VIEW hansik;
  • OR REPLACE 옵션
    • 테이블을 DROP하지 않고 기존의 VIEW를 새로운 VIEW로 쉽게 다룰 수 있다.

      -- view 생성	
      CREATE or replace VIEW v_menu  -- or replace를 통해 덮어씌울 수 있다.
      AS
      SELECT
      		menu_name '메뉴이름'
      		, menu_price '메뉴가격'
      	FROM tbl_menu;
      	
      SELECT * FROM v_menu;
profile
나는 할 수 있다...!

0개의 댓글