CREATE VIEW

CREATE VIEW

本命令用于基于对一个或多个现有表的查询结果,在当前或指定的 SCHEMA 中创建一个新的视图。视图像一个保存好的 SQL 查询快捷方式,本身不存数据,每次查询时实时执行底层 SQL。

语法

CREATE [ OR REPLACE ] VIEW [ IF NOT EXISTS ] [schema_name.]view_name [ (column_name COMMENT 'comment' [, ...]) ] [ COMMENT 'comment' ] AS query;

参数说明

  • OR REPLACE:替换同名的已存在视图(如果存在)。不能与
    IF NOT EXISTS
    IF NOT EXISTS
    同时使用。效果等同于先
    DROP VIEW
    DROP VIEW
    再重新创建。
  • IF NOT EXISTS:如果同名视图已存在,则跳过创建,不报错。不能与
    OR REPLACE
    OR REPLACE
    同时使用。
  • column_name:为视图列指定别名或添加注释。列数量和顺序须与
    query
    query
    的输出列一一对应。
  • COMMENT:为视图添加描述信息,便于其他用户了解视图用途。
  • query:定义视图内容的 SQL 查询语句。

使用示例

示例 1:创建基础过滤视图

创建一个只包含高价值订单(金额大于 500)的视图:

CREATE OR REPLACE VIEW doc_test.v_high_value_orders AS SELECT order_id, customer_id, amount FROM doc_test.orders WHERE amount > 500;

查询视图:

SELECT * FROM doc_test.v_high_value_orders LIMIT 3;

返回结果:

order_id | customer_id | amount ---------|-------------|-------- 1002 | 2 | 2999.00 1003 | 1 | 3499.00 1001 | 1 | 5999.00

示例 2:创建带列注释和视图注释的视图

CREATE OR REPLACE VIEW doc_test.v_completed_orders ( order_id COMMENT '订单编号', customer_id COMMENT '客户编号', product COMMENT '商品名称', amount COMMENT '订单金额' ) COMMENT '已完成订单视图' AS SELECT order_id, customer_id, product, amount FROM doc_test.orders WHERE status = 'completed';

查询视图:

SELECT * FROM doc_test.v_completed_orders;

返回结果:

order_id | customer_id | product | amount ---------|-------------|---------|-------- 1001 | 1 | Laptop | 5999.00 1003 | 1 | Tablet | 3499.00

示例 3:使用 OR REPLACE 更新视图定义

在已有视图基础上增加

status
status
列:

CREATE OR REPLACE VIEW doc_test.v_high_value_orders AS SELECT order_id, customer_id, amount, status FROM doc_test.orders WHERE amount > 500;

示例 4:在指定 SCHEMA 中创建视图

CREATE VIEW my_schema.v_recent_orders AS SELECT order_id, customer_id, amount FROM my_schema.orders WHERE order_date >= '2024-01-01';

示例 5:删除视图

DROP VIEW IF EXISTS doc_test.v_high_value_orders;

注意事项

  • OR REPLACE
    OR REPLACE
    IF NOT EXISTS
    IF NOT EXISTS
    不能同时使用。
  • 视图不存储数据,每次查询视图时都会实时执行底层 SQL,查询性能取决于底层表的数据量和查询复杂度。
  • 删除底层表后,依赖该表的视图查询将报错。
  • 视图删除后无法通过
    UNDROP
    UNDROP
    恢复,删除前请保存创建语句(可用
    SHOW CREATE TABLE <view_name>
    SHOW CREATE TABLE <view_name>
    获取)。

视图 vs 动态表 vs 物化视图

对象适用场景
VIEW(视图)封装常用查询逻辑,每次查询实时计算,无额外存储开销
Dynamic Table(动态表)需要预计算结果以加速查询,支持增量刷新,适合中等延迟的数据加工
Materialized View(物化视图)需要将查询结果持久化存储,适合高频访问的聚合或复杂计算场景

相关命令

联系我们
预约咨询
微信咨询
电话咨询