📜  PostgreSQL-视图(1)

📅  最后修改于: 2023-12-03 15:03:50.161000             🧑  作者: Mango

PostgreSQL 视图

在 PostgreSQL 中,视图是一种虚拟表格,它们并不实际存储数据,而是提供了一种将多个表格连接起来的方法。视图可以简化查询语句,提高查询效率,并允许你访问某些表中的一部分数据。本文将介绍如何在 PostgreSQL 中创建和使用视图。

创建视图

在 PostgreSQL 中,创建视图需要使用 CREATE VIEW 语句:

CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;

视图的名称在 CREATE VIEW 语句的第一行中指定。在 AS 关键字之后,我们可以指定查询语句,这个查询语句可以引用一个或多个表格,并且可以使用所有的 SQL 语法元素。

例如,假设我们有一个表格 sales 包含 order_idcustomer_idamount 列,我们可以创建一个名为 revenue 的视图,来计算每个客户的营收:

CREATE VIEW revenue AS
SELECT customer_id, SUM(amount) AS total_revenue
FROM sales
GROUP BY customer_id;

在上面的代码段中,我们使用了 CREATE VIEW 语句来创建 revenue 视图。这个视图由查询语句 SELECT customer_id, SUM(amount) AS total_revenue FROM sales GROUP BY customer_id 定义。查询语句将 sales 表格中的数据按客户 ID 分组,并计算每个客户的总销售额。这个视图将包含两列:customer_idtotal_revenue

使用视图

一旦我们创建了视图,就可以像使用任何其他表格一样使用它。我们可以执行 SELECT 语句来查询这个视图:

SELECT * FROM revenue;

当我们执行上面的查询时,PostgreSQL 将使用我们定义的 SELECT 语句生成表格,并将它当作一个虚拟表格返回。结果是一个包含客户 ID 和总营收的表格:

 customer_id | total_revenue
-------------+---------------
           1 |         20000
           2 |         25000
           3 |         10000

我们可以像使用表格一样使用这个视图。例如,我们可以在查询中引用这个视图:

SELECT s.order_id, s.amount, r.total_revenue
FROM sales s
JOIN revenue r ON s.customer_id = r.customer_id;

在上面的查询中,我们使用 JOIN 连接 salesrevenue 表格。PostgreSQL 将执行这个查询,计算每个客户的总营收,并将它添加到 sales 表格中,然后将结果返回。

更新视图

在 PostgreSQL 中,你可以更新视图。如果视图的定义包含了一个连接,那么当你更新视图时,连接的全部表格都可能被修改。所有的修改都像更新原始表格一样执行。

例如,假设我们有以下视图:

CREATE VIEW high_revenue_customers AS
SELECT customer_id
FROM revenue
WHERE total_revenue > 20000;

在这个视图中,我们将营收超过 20000 的客户视为高营收客户。如果我们要将 sales 表格中所有高营收客户的订单取消,我们可以使用以下语句:

DELETE FROM sales
WHERE customer_id IN (
  SELECT customer_id FROM high_revenue_customers
);

在上面的代码段中,我们使用 DELETE 语句来删除 sales 表格中的数据。我们使用 IN 子句来筛选出所有在 high_revenue_customers 视图中的客户,然后删除他们的订单。

删除视图

如果我们想要删除视图,可以使用 DROP VIEW 语句:

DROP VIEW view_name;

在上面的代码段中,view_name 是你要删除的视图的名称。当你执行这个命令时,PostgreSQL 将删除这个视图。任何引用这个视图的查询都将失败。