CREATE VIEW语句创建一个新视图,它是一个表示为虚拟表的存储查询。

所需权限

用户必须对父数据库具有CREATE特权,并且对视图引用的任何表具有SELECT特权。

概要

图片

参数

Parameter Description
view_name 要创建的视图的名称,该视图的名称在其数据库中必须是唯一的,并遵循标识符规则。 如果未设置默认父数据库,则必须将名称格式设置为database.name
name_list 可选项,视图的逗号分隔的列名列表。 如果指定,则将在response中使用这些名称,而不是AS select_stmt中指定的列。
AS select_stmt 在请求视图时执行的选择查询。

请注意,目前无法使用*来从引用的表或视图中选择所有列,你必须指定特定的列。

示例

此示例展示了使用视图的一个主要好处:简化复杂查询。 有关其他好处和示例,请参阅视图

假设你正在使用我们的示例startrek数据库,它包含两个表,episodesquotesepisodes.id列和quotes.episode列之间存在外键约束。 要计算每个人的名言数量,你可以运行以下join语句:

> SELECT startrek.episodes.season, count(*)
  FROM startrek.quotes
  JOIN startrek.episodes
  ON startrek.quotes.episode = startrek.episodes.id
  GROUP BY startrek.episodes.season;
+--------+----------+
| season | count(*) |
+--------+----------+
|      2 |       76 |
|      3 |       46 |
|      1 |       78 |
+--------+----------+
(3 rows)

或者,为了更简单,你可以创建一个视图:

> CREATE VIEW startrek.quotes_per_season (season, quotes)
  AS SELECT startrek.episodes.season, count(*)
  FROM startrek.quotes
  JOIN startrek.episodes
  ON startrek.quotes.episode = startrek.episodes.id
  GROUP BY startrek.episodes.season;
CREATE VIEW

然后,该视图与数据库中的其他表一起表示为虚拟表:

> SHOW TABLES FROM startrek;
+-------------------+
|       Table       |
+-------------------+
| episodes          |
| quotes            |
| quotes_per_season |
+-------------------+
(4 rows)

执行查询就像从视图中选择SELECT一样简单,就像从标准表中执行一样:

> SELECT * FROM startrek.quotes_per_season;
+--------+--------+
| season | quotes |
+--------+--------+
|      2 |     76 |
|      3 |     46 |
|      1 |     78 |
+--------+--------+
(3 rows)

已知限制

在未来的CockroachDB版本中可能会解除以下限制。 在用于定义视图的选择查询中,尚不可能使用通用table表达式。

See Also