SQL/sql 문법(mysql, mariaDB)

데이터 베이스 _ 뷰(view)

읽히는 블로그 2024. 5. 13. 09:31

▤ 목차

    ✔ 뷰(view)

    뷰(view)란 데이터 베이스에 존재하는 가상의 테이블을 말한다. 뷰를 이용해서 실제 테이블처럼 행과 열을 가지고 있지만, 데이터를 저장하고 있지 않는다.

    ✨장점

    • 보안 강화 ) 특정 사용자에게 테이블 전체가 아닌 필요한 자료만 보여줄 수 있다.
    • 복잡한 쿼리를 단순화해서 사용할 수 있다.
    • 독립성 확보) 사용한 쿼리를 재사용할 수 있다.
    • 논리적 테이블을 만들기때문에 메모리 절감 효과가 있다.

    ✨ 단점

    • 삽입, 삭제, 갱신 작업에 많은 제한 사항을 가진다
    • 자신만의 인덱스를 가질 수 없다.

    ⌨ 형식

    CREATE [or REPLACE] VIEW [view_name] AS SELECT문;
    DROP VIEW view_name;

     

    ⌨ 테이블 변경 덮어쓰기 : OR REPLACE

    이 명령어를 사용하면 테이블 변경사항을 덮어써준다.

     

    (OR REPLACE 없는 테이블)

    create VIEW v_b AS
    select * FROM jikwon WHERE jikwon_name LIKE'김%' OR
    jikwon_name LIKE '박%';

     

    v_b라는 이름의 뷰테이블을 생성한다. 해당 테이블은 김 혹은 박으로 시작하는 직원만 존재한다.

    ALTER TABLE jikwon RENAME sbs;

    테이블 이름을 sbs로 변경해보자.

    이후 다시 v_b를 조회해보자.

    SELECT * FROM v_b;

    오류가 뜬다. 다시 이름을 바꿔보자.

    ALTER TABLE sbs RENAME jikwon;
    SELECT * FROM v_b;

    잘 작동하는 것을 알 수 있다.

     

    💻 뷰 테이블 확인하기

    SHOW FULL TABLES IN mydb WHERE TABLE_TYPE LIKE 'view';

    원하는 데이터베이스에 뷰 테이블을 확인 할 수 있는 쿼리이다.

     

    이렇게 해당 테이블의 타입을 확인할 수 있다.

     

    ⌨ 조건이 걸린 데이터만 ram에 가지고 온다.

    CREATE VIEW v_c AS SELECT * FROM jikwon ORDER BY jikwon_pay DESC;
    SELECT * FROM v_c;

    원하는데로 정렬된 뷰를 만들 수 있다.

     


    v_d 테이블

    CREATE VIEW v_d AS SELECT jikwon_no AS 번호,jikwon_name 이름,jikwon_pay * 10000 AS 연봉
    FROM jikwon ORDER BY jikwon_pay DESC;

    칼럼에 별명을 주고 뷰를 만들어줬다. 뷰 테이블을 사용하는 user는 칼럼명을 별명으로 사용해야한다.

     

     

    SELECT jikwon_no, jikwon_name FROM v_d; -- err

    이렇게 직접적으로 칼럼명을 적을 수 없다.

    뷰를 생성했을 때 별칭으로 정한 이름이 뷰 칼럼으로 나타나는 것을 확인 할 수 있다. 

    SELECT 번호, 이름 FROM v_d;

    내 ram 공간에는 뷰테이블 (select로 요청한 테이블)만 있다.

     

     

    💻 뷰 테이블로 뷰만들기

    CREATE VIEW v_e AS SELECT * FROM v_d WHERE 연봉 >= 78000000;
    
    SELECT * FROM v_e;

     

    👏 중요

    뷰는 마치 실제 테이블처럼 사용된다.

    뷰로 새로운 뷰 테이블이 만들어 진다.

     

    😊정리

    가상 테이블이다.

    기본 테이블은 물리적인 테이블로 디스크에 공간이 할당되어 데이터를 저장한다.

    뷰는 데이터 딕셔너리 테이블에 뷰에 대한 SQL문만 저장되어 저장 공간 할당이 이뤄지지 않는다.

    전체 데이터 중 일부만 접근할 수있도록 한다. (보안적으로 유리하다.)

    - 사용자마다 특정 데이터만 조회할 수 있도록 권한 제한을 둘 수 있다.

    뷰를 정의한 기본 테이블에서 정의된 무결성 제약 조건은 그대로 유지된다.