1. VIEW


  - 테이블과 유사한 객체(가상의 테이블)
  - SELECT문의 결과 집합
  - 테이블과는 독립적으로 사용됨
  - VIEW는
   . 필요한 정보가 여러 테이블에 분산되어 있는 경우
   . 특정자료의 접근을 제어하는 경우

(사용형식)
   CREATE [OR REPLACE] VIEW 뷰이름[(컬럼list)] -- CREATE <-> DROP
   AS                  -- 컬럼LIST가 생략될 시 SELECT문의 이름을 사용
     SELECT 문;         -- 뷰가 변경되면 원본도 변경 됨
     [WITH READ ONLY]  -- > 뷰 값이 변경되지 않음
     [WITH CHECK OPTION]   -- CHECK, READ 둘 중에 하나만 사용 가능(동시에 사용 불가)
  • '(컬럼list)':뷰에서 사용할 컬럼명. 생략하면 SELECT문의 컬럼 별칭이 뷰의 컬럼명이되고,
          SELECT문에서 컬럼 별칭이 없는 경우 SELECT문의 컬럼명이 뷰의 컬럼명이 됨
  • 'OR REPLACE' : '뷰이름'이 이미 존재하면 대치시키고 없으면 신규로 생성
  • 'WITH READ ONLY' : 읽기전용 뷰 생성. 뷰를 대상으로 DML명령을 수행시킬 수 없음. 다만
      원본테이블은 제한없이 DML명령 사용할 수 있으며, 원본테이블에서 변경사항은 즉시 뷰에 반영
  • 'WITH CHECK OPTION' : 원본 SELECT문의 WHERE 조건을 위배하는 값으로 뷰의 내용을 변경하는
      ML명령을 사용할 수 없다. 다만 원본테이블은 제한없이 DML명령 사용할 수 있으며,
     원본테이블에서 변경사항은 즉시 뷰에 반영
사용예)회원테이블에서 마일리지가 3000이상인 회원의 회원번호,회원명,마일리지로 뷰를 생성하시오    
  CREATE OR REPLACE VIEW MEM_MILE_V1(MID,MNAME,MILEAGE)
  AS
    SELECT MEM_ID,MEM_NAME,MEM_MILEAGE
      FROM MEMBER
     WHERE MEM_MILEAGE>=5000;  
   
  SELECT * FROM  MEM_MILE_V1; 
  **(원본테이블 내용이 변경)
    회원테이블에서 'e001'회원의 마일리지를 9299에서 4000으로 변경하시오
    UPDATE MEMBER
       SET MEM_MILEAGE=4000
     WHERE MEM_ID = 'e001';  
     
  **(뷰의 내용이 변경)
     뷰(MEM_MILE_V1)에서 'x001'회원의 마일리지를 9791에서 2000으로 변경하시오
     UPDATE MEM_MILE_V1
        SET MILEAGE=2000
      WHERE MID = 'x001';  
      
     SELECT * FROM MEM_MILE_V1;
     SELECT MEM_ID,MEM_MILEAGE FROM MEMBER;
     
     ROLLBACK;
     COMMIT;
     
     CREATE OR REPLACE VIEW MEM_MILE_V1
     AS
      SELECT MEM_ID AS 회원번호,
             MEM_NAME AS 회원명,
             MEM_MILEAGE AS 마일리지
        FROM MEMBER
       WHERE MEM_MILEAGE>=5000; 
     
**테이블 복사
  CREATE TABLE 테이블명
  AS 
    SELECT 문;
    
  CREATE TABLE CUSTOMERS
  AS
    SELECT * FROM MEMBER;
    
  CREATE OR REPLACE VIEW MEM_MILE_V1
     AS
      SELECT MEM_ID AS 회원번호,
             MEM_NAME AS 회원명,
             MEM_MILEAGE AS 마일리지
        FROM CUSTOMERS
       WHERE MEM_MILEAGE>=5000;  
       
  SELECT * FROM MEM_MILE_V1; 
  
사용예)MEM_MILE_V1 뷰에 회원번호 'a002', '홍길동',마일리지 3000 자료를 입력하시오
  INSERT INTO MEM_MILE_V1 VALUES ('a002', '홍길동',3000);
  
  CREATE OR REPLACE VIEW MEM_MILE_V2
     AS
      SELECT MEM_ID ,
             MEM_NAME ,
             MEM_MILEAGE 
        FROM CUSTOMERS
       WHERE MEM_MILEAGE>=5000
        WITH READ ONLY --뷰에만 적용
  
  SELECT * FROM MEM_MILE_V2;
**CUSTOMERS에서 'p001'자료를 삭제  --테이블에서 삭제하면 뷰에서도 삭제 됨
  DELETE FROM CUSTOMERS
   WHERE MEM_ID='p001';
   
  CREATE OR REPLACE VIEW MEM_MILE_V3
     AS
      SELECT MEM_ID AS 회원번호,
             MEM_NAME AS 회원명,
             MEM_MILEAGE AS 마일리지
        FROM CUSTOMERS
       WHERE MEM_MILEAGE>=5000 
       WITH CHECK OPTION;
      SELECT * FROM MEM_MILE_V3; 
  
**뷰 MEM_MILE_V3에서 '이쁜이'회원의 마일리지를 10000으로 변경하시오
  UPDATE MEM_MILE_V3
     SET 마일리지 = 10000
   WHERE 회원명 = '이쁜이';  --원본테이블의 WHERE조건을 만족하면 변경가능(원본테이블도 변경됨)

+ Recent posts