tencent cloud

TDSQL Boundless

视图

PDF
聚焦模式
字号
最后更新时间: 2026-03-26 14:57:33
本文档介绍如何在 TDSQL Boundless 数据库中使用视图。视图是基于 SQL 查询定义的虚拟表,它本身不存储数据,而是在每次查询时动态执行底层的 SQL 语句生成结果。
视图的主要用途:
简化复杂查询:将多表连接、聚合等复杂查询封装为虚拟表,后续使用时像查询普通表一样简洁。
数据安全:只向用户暴露特定字段,隐藏底层敏感数据。
逻辑复用:将通用的查询逻辑定义为视图,避免在多处重复编写相同的 SQL。

创建视图

使用 CREATE VIEW 语句创建视图。
创建一个客户订单汇总视图,包含每个客户的订单数量和总金额:
CREATE VIEW customer_order_summary AS
SELECT
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
FROM customer c
LEFT JOIN orders o ON c.c_custkey = o.o_custkey
GROUP BY c.c_custkey, c.c_name, c.c_mktsegment;
创建一个区域供应商视图,展示各区域的供应商信息:
CREATE VIEW regional_suppliers AS
SELECT
r.r_name AS region_name,
n.n_name AS nation_name,
s.s_suppkey,
s.s_name AS supplier_name,
s.s_phone
FROM region r
INNER JOIN nation n ON r.r_regionkey = n.n_regionkey
INNER JOIN supplier s ON n.n_nationkey = s.s_nationkey;
注意:
创建视图时,视图名称不能与已有的表或视图重名。

查询视图

视图创建完成后,可以像查询普通表一样使用 SELECT 语句查询视图。
查询订单数量最多的前10名客户:
SELECT c_name, c_mktsegment, order_count, total_spent
FROM customer_order_summary
ORDER BY order_count DESC
LIMIT 10;
在视图上添加过滤条件:
SELECT c_name, order_count, total_spent
FROM customer_order_summary
WHERE c_mktsegment = 'BUILDING'
AND order_count > 10
ORDER BY total_spent DESC;
视图与其他表进行连接:
SELECT
rs.region_name,
rs.supplier_name,
ps.ps_partkey,
ps.ps_supplycost
FROM regional_suppliers rs
INNER JOIN partsupp ps ON rs.s_suppkey = ps.ps_suppkey
WHERE rs.region_name = 'ASIA'
ORDER BY ps.ps_supplycost
LIMIT 20;
TDSQL Boundless 在查询视图时,会在内部将视图展开为创建时定义的原始 SQL 语句执行。例如查询 customer_order_summary 时,实际执行的是其底层的 SELECT ... FROM customer LEFT JOIN orders ... 语句加上外层的过滤和排序条件。

更新视图

当需要修改视图的定义时,可以使用 CREATE OR REPLACE VIEW 语句,无需先删除再重建。
为客户订单汇总视图增加平均订单金额字段:
CREATE OR REPLACE VIEW customer_order_summary AS
SELECT
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_amount
FROM customer c
LEFT JOIN orders o ON c.c_custkey = o.o_custkey
GROUP BY c.c_custkey, c.c_name, c.c_mktsegment;
也可以通过先删除再创建的方式更新视图:
DROP VIEW IF EXISTS customer_order_summary;
CREATE VIEW customer_order_summary AS
SELECT ...;

获取视图相关信息

使用 SHOW CREATE VIEW

查看视图的完整创建语句:
SHOW CREATE VIEW customer_order_summary\\G

查询 INFORMATION_SCHEMA

通过系统表 information_schema.views 查看视图的元数据信息:
SELECT
TABLE_NAME,
VIEW_DEFINITION,
CHECK_OPTION,
IS_UPDATABLE
FROM 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

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈