CREATE VIEW

CREATE VIEW

SELECT 쿼리를 저장해 놓은 뷰(view)를 새로 만들 때 쓰는 명령어예요. 뷰는 데이터를 직접 담지 않고, 참조될 때마다 저장된 쿼리를 실행해요.

출처: 문서

본문

Synopsis

CREATE [ OR REPLACE ] VIEW view_name
[ COMMENT view_comment ]
[ SECURITY { DEFINER | INVOKER } ]
AS query

Description

SELECT 쿼리의 뷰를 새로 만들어요. 뷰는 이후 쿼리에서 참조할 수 있는 논리적 테이블이에요. 뷰는 데이터를 담지 않아요. 대신 뷰가 저장한 쿼리가 다른 쿼리에서 참조될 때마다 실행돼요.

선택적인 OR REPLACE 절은 뷰가 이미 존재할 때 오류를 내는 대신 기존 뷰를 교체해요.

Security

기본 DEFINER 보안 모드에서는 뷰가 참조하는 테이블을 쿼리를 실행하는 사용자가 아니라 뷰 소유자(뷰를 만든 사람 또는 definer)의 권한으로 접근해요. 이렇게 하면 사용자가 직접 접근할 수 없는 기본 테이블에 대해 제한된 접근을 제공할 수 있어요.

INVOKER 보안 모드에서는 뷰가 참조하는 테이블을 쿼리를 실행하는 사용자(뷰의 invoker)의 권한으로 접근해요. 이 모드로 만든 뷰는 단순히 저장된 쿼리일 뿐이에요.

보안 모드와 무관하게 current_user 함수는 항상 쿼리를 실행하는 사용자를 반환하므로, 뷰 안에서 행을 걸러내거나 접근을 제한하는 데 사용할 수 있어요.

Examples

orders 테이블 위에 간단한 뷰 test를 만들려면:

CREATE VIEW test AS
SELECT orderkey, orderstatus, totalprice / 2 AS half
FROM orders

뷰 주석이 있는 test_with_comment 뷰를 만들려면:

CREATE VIEW test_with_comment
COMMENT 'A view to keep track of orders.'
AS
SELECT orderkey, orderstatus, totalprice
FROM orders

주문을 요약하는 orders_by_date 뷰를 만들려면:

CREATE VIEW orders_by_date AS
SELECT orderdate, sum(totalprice) AS price
FROM orders
GROUP BY orderdate

기존 뷰를 교체하는 뷰를 만들려면:

CREATE OR REPLACE VIEW test AS
SELECT orderkey, orderstatus, totalprice / 4 AS quarter
FROM orders

See also

ALTER VIEW, DROP VIEW, SHOW CREATE VIEW, SHOW TABLES 명령과 함께 사용해요.

더 알아보기 (Learn more)

뷰를 바꾸는 ALTER VIEW와 제거하는 DROP VIEW도 함께 확인해 보세요.