PostgreSQL 使用示例创建视图

⚡ 智能摘要

PostgreSQL 视图是由存储的 SELECT 查询构建的伪表,允许您将复杂或常用的查询封装在一个名称后面,您可以像读取普通表一样读取、更新或删除它。

  • 🗂️ 伪表: 视图存储的是查询语句,而不是数据,但你可以像查询表一样查询它。
  • 🛠️ 创建: CREATE VIEW 为 SELECT 查询命名,即使跨越多个基表,也便于重复使用。
  • ♻️ 更换: 创建或替换视图可在不拖放的情况下更改视图。ping 它。
  • 🗑️ 降: DROP VIEW 用于删除视图,IF EXISTS 用于避免错误。
  • 🤖 人工智能帮助: AI助手生成视图定义并建议要封装哪些查询。

PostgreSQL 创建视图

什么是 PostgreSQL 看法?

In PostgreSQL,视图是伪表。这意味着视图不是真正的表。但是,我们可以像普通表一样对其进行 SELECT。视图可以具有所有或部分表列。视图也可以是多个表的表示。

这些表被称为基础表。创建视图时,只需创建一个查询并为其命名,使其成为封装数据的有效工具。ping 复杂且常用的查询。

创造 PostgreSQL 观看数

要创建 PostgreSQL 视图,我们使用 CREATE VIEW 语句。此语句的语法如下:

CREATE [OR REPLACE] VIEW view-name AS
  SELECT column(s)
  FROM table(s)
  [WHERE condition(s)];

如果视图已存在,则 OR REPLACE 参数将替换该视图。如果省略该参数并且视图已存在,则会返回错误。

view-name参数是您需要创建的视图的名称。

WHERE 条件是可选的,但要将任何记录添加到视图中,必须满足这些条件。

考虑下面给出的价格表:

价格:

创造 PostgreSQL 观看数

让我们从上表创建一个视图:

CREATE VIEW Price_View AS
  SELECT id, price
  FROM Price
  WHERE price > 200;

上述命令将根据以下内容创建一个视图 选择语句。只有价格大于 200 的记录才会添加到视图中。该视图的名称为 Price_View。让我们查询它以查看其内容:

SELECT *
FROM Price_View;

这将返回以下内容:

创造 PostgreSQL 观看数

尽管基表有 4 条记录,但只有 2 条记录被添加到视图中。

这里,我们只能向视图中添加一列。让我们创建一个只包含“价格”表中一列的视图:

CREATE VIEW Price_View2 AS
  SELECT price
  FROM Price
  WHERE price > 200;

该视图被命名为 Price_View2,并且仅包含 Price 表的价格列。让我们查询该视图以查看其内容:

SELECT *
FROM Price_View2;

这将返回以下内容:

创造 PostgreSQL 观看数

改变 PostgreSQL 观看数

无需删除视图即可更改其定义。这可以使用 CREATE OR REPLACE VIEW 语句完成。

让我们通过更新名为 Price_View2 的视图来演示这一点。

价格视图2:

改变 PostgreSQL 观看数

Book 表如下:

书:

改变 PostgreSQL 观看数

价格表如下:

价格:

改变 PostgreSQL 观看数

以下查询将帮助我们更新视图 Price_View2:

CREATE or REPLACE VIEW Price_View2 AS
  SELECT price, name
  FROM Book
  INNER JOIN Price
  ON Book.id = Price.id
  WHERE price > 200;

现在让我们查询视图来查看其内容:

改变 PostgreSQL 观看数

视图已更改,现在我们有来自两个不同表的两列。这是使用 JOIN 语句实现的。

删除 PostgreSQL 观看数

任何时候你需要删除 PostgreSQL 要删除视图,可以使用 DROP VIEW 语句。以下是该语句的语法:

DROP VIEW [IF EXISTS] view-name;

参数view-name为需要删除的视图的名称。

在此语法中,IF EXISTS 是可选的。如果您不指定它并尝试删除一个不存在的视图,则会收到错误。

例如,要删除名为 Price_View2 的视图,我们可以运行以下语句:

DROP VIEW Price_View2;

该视图将被删除。

使用 pgAdmin

现在让我们看看如何使用 pgAdmin 执行这些操作。

创造 PostgreSQL 观看数

要通过 pgAdmin 完成相同操作,请执行以下操作:

步骤1) 登录您的 pgAdmin 帐户。

步骤2)

  • 从左侧导航栏中单击数据库。
  • 单击“演示”。

创造 PostgreSQL 使用 pgAdmin 的视图

步骤3) 在查询编辑器中输入查询:

CREATE VIEW Price_View AS
  SELECT id, price
  FROM Price
  WHERE price > 200;

步骤4) 单击执行按钮。

创造 PostgreSQL 使用 pgAdmin 的视图

步骤5) 要查看视图内容,请执行以下操作:

  • 在查询编辑器中键入以下命令:
SELECT *
FROM Price_View;
  • 单击执行按钮。

创造 PostgreSQL 使用 pgAdmin 的视图

这将返回以下内容:

创造 PostgreSQL 使用 pgAdmin 的视图

要创建视图 Price_View2,请执行以下操作:

步骤1) 在查询编辑器中键入以下查询:

CREATE VIEW Price_View2 AS
  SELECT price
  FROM Price
  WHERE price > 200;

步骤2) 单击执行按钮。

创造 PostgreSQL 使用 pgAdmin 的视图

步骤3) 要查看视图的内容,请执行以下操作:

  • 在查询编辑器中键入以下查询:
SELECT *
FROM Price_View2;
  • 单击执行按钮。

创造 PostgreSQL 使用 pgAdmin 的视图

这将返回以下内容:

创造 PostgreSQL 使用 pgAdmin 的视图

改变 PostgreSQL 观看数

要通过 pgAdmin 完成相同操作,请执行以下操作:

步骤1) 登录您的 pgAdmin 帐户。

步骤2)

  • 从左侧导航栏中单击数据库。
  • 单击“演示”。

改变 PostgreSQL 使用 pgAdmin 的视图

步骤3) 在查询编辑器中输入查询:

CREATE or REPLACE VIEW Price_View2 AS
  SELECT price, name
  FROM Book
  INNER JOIN Price
  ON Book.id = Price.id
  WHERE price > 200;

步骤4) 单击执行按钮。

改变 PostgreSQL 使用 pgAdmin 的视图

步骤5) 在查询编辑器中键入以下查询:

SELECT *
FROM Price_View2;

这将返回以下内容:

改变 PostgreSQL 使用 pgAdmin 的视图

删除 PostgreSQL 观看数

要通过 pgAdmin 完成相同操作,请执行以下操作:

步骤1) 登录您的 pgAdmin 帐户。

步骤2)

  • 从左侧导航栏中单击数据库。
  • 单击“演示”。

删除 PostgreSQL 使用 pgAdmin 的视图

步骤3) 在查询编辑器中输入查询:

DROP VIEW Price_View2;

步骤4) 单击执行按钮。

删除 PostgreSQL 使用 pgAdmin 的视图

该视图将被删除。

下载本教程使用的数据库

常见问题

表将数据实际存储在磁盘上。视图仅存储 SELECT 查询语句,因此查询视图会重新运行该查询语句,并返回基表中的最新数据。

物化视图会将查询结果缓存到磁盘上。它的读取速度比普通视图快,但需要调用 REFRESH MATERIALIZED VIEW 来显示新数据。

标准视图每次都会运行查询,显示实时数据。物化视图为了提高速度,会将结果存储在磁盘上,但数据可能过时,需要刷新。

有时是这样。简单的单表视图(不包含聚合)会自动更新,因此可以直接执行 INSERT、UPDATE 和 DELETE 操作。复杂的视图则需要使用 INSTEAD OF 触发器。

查询目录:SELECT table_name FROM information_schema.views WHERE table_schema = 'public'。在 pgAdmin 中,您可以展开架构下的“视图”节点。

AI 助手将纯语言请求转换为 CREATE VIEW 语句,命名视图,并添加正确的 WHERE 和 JOIN 子句,从而加快您经常重复使用的查询速度。

是的。粘贴一个很长的 SELECT 语句,AI 助手就会将其包装在 CREATE OR REPLACE VIEW 中,建议一个名称,并标记需要别名的列以避免名称重复。

普通视图并不能加快查询速度,因为它的 SELECT 语句每次都会执行。为了加快重复读取速度,请使用物化视图,它会将结果存储在磁盘上,直到刷新为止。

总结一下这篇文章: