视图的主要用途:
·简化复杂查询:将多表连接、聚合等复杂查询封装为虚拟表,后续使用时像查询普通表一样简洁。
·数据安全:只向用户暴露特定字段,隐藏底层敏感数据。
·逻辑复用:将通用的查询逻辑定义为视图,避免在多处重复编写相同的 SQL。
一、创建视图
使用 CREATE VIEW 语句创建视图。
创建一个客户订单汇总视图,包含每个客户的订单数量和总金额:
CREATE VIEW customer_order_summary ASSELECT c.c_custkey, c.c_name, c.c_mktsegment, COUNT(o.o_orderkey) AS order_count, COALESCE(SUM(o.o_totalprice), 0) AS total_spentFROM customer cLEFT JOIN orders o ON c.c_custkey = o.o_custkeyGROUP BY c.c_custkey, c.c_name, c.c_mktsegment;
创建一个区域供应商视图,展示各区域的供应商信息:
CREATE VIEW regional_suppliers ASSELECT r.r_name AS region_name, n.n_name AS nation_name, s.s_suppkey, s.s_name AS supplier_name, s.s_phoneFROM region rINNER JOIN nation n ON r.r_regionkey = n.n_regionkeyINNER JOIN supplier s ON n.n_nationkey = s.s_nationkey;
注意:创建视图时,视图名称不能与已有的表或视图重名。
二、查询视图
视图创建完成后,可以像查询普通表一样使用 SELECT 语句查询视图。
查询订单数量最多的前10名客户:
SELECT c_name, c_mktsegment, order_count, total_spentFROM customer_order_summaryORDER BY order_count DESCLIMIT 10;
在视图上添加过滤条件:
SELECT c_name, order_count, total_spentFROM customer_order_summaryWHERE c_mktsegment = 'BUILDING' AND order_count > 10ORDER BY total_spent DESC;
视图与其他表进行连接:
SELECT rs.region_name, rs.supplier_name, ps.ps_partkey, ps.ps_supplycostFROM regional_suppliers rsINNER JOIN partsupp ps ON rs.s_suppkey = ps.ps_suppkeyWHERE rs.region_name = 'ASIA'ORDER BY ps.ps_supplycostLIMIT 20;
TDSQL Boundless 在查询视图时,会在内部将视图展开为创建时定义的原始 SQL 语句执行。例如查询 customer_order_summary 时,实际执行的是其底层的 SELECT … FROM customer LEFT JOIN orders … 语句加上外层的过滤和排序条件。
三、更新视图
当需要修改视图的定义时,可以使用 CREATE OR REPLACE VIEW 语句,无需先删除再重建。
为客户订单汇总视图增加平均订单金额字段:
CREATE OR REPLACE VIEW customer_order_summary ASSELECT c.c_custkey, c.c_name, c.c_mktsegment, COUNT(o.o_orderkey) AS order_count, COALESCE(SUM(o.o_totalprice), 0) AS total_spent, COALESCE(AVG(o.o_totalprice), 0) AS avg_order_amountFROM customer cLEFT JOIN orders o ON c.c_custkey = o.o_custkeyGROUP BY c.c_custkey, c.c_name, c.c_mktsegment;
也可以通过先删除再创建的方式更新视图:
DROP VIEW IF EXISTS customer_order_summary;CREATE VIEW customer_order_summary ASSELECT …;
四、使用 SHOW CREATE VIEW
查看视图的完整创建语句:
SHOW CREATE VIEW customer_order_summary\\G
五、查询 INFORMATION_SCHEMA
通过系统表 information_schema.views 查看视图的元数据信息:
SELECT TABLE_NAME, VIEW_DEFINITION, CHECK_OPTION, IS_UPDATABLEFROM information_schema.views WHERE TABLE_SCHEMA = 'your_database_name' AND TABLE_NAME = 'customer_order_summary'\\G
六、删除视图
使用 DROP VIEW 语句删除视图。建议使用 IF EXISTS 避免视图不存在时报错。
DROP VIEW IF EXISTS customer_order_summary;
一次删除多个视图:
DROP VIEW IF EXISTS customer_order_summary, regional_suppliers;
七、局限性
在 TDSQL Boundless 中使用视图时,需要注意以下限制:
·不支持物化视图 — 仅支持普通视图,不预存结果。
·只读视图 — 不支持 UPDATE/INSERT/DELETE/TRUNCATE 写入操作。
·DDL 限制 — 仅支持 DROP VIEW/TABLE,不支持 ALTER VIEW。