📅  最后修改于: 2020-11-30 09:17:52             🧑  作者: Mango
在本节中,我们将了解PostgreSQL视图的工作原理,例如如何创建PostgreSQL视图,更改PostgreSQL视图,更改PostgreSQL视图以及删除PostgreSQL视图。
VIEW是PostgreSQL中的伪表。它不是实体表,但显示为要选择的普通表。视图也可以表示联接的表。它可以包含一个表的所有行或一个或多个表中的选定行。
视图简化了用户执行以下方面的工作:
在PostgreSQL中,我们可以在SQL shell(psql)中执行view的所有活动:
使用SQL Shell(PSQL)的PostgreSQL视图
在本文中,我们将使用SQL shell(psql)创建视图,更改视图并删除视图。因此,为此,我们需要遵循以下过程:
要创建PostgreSQL视图,我们使用CREATE VIEW命令。
句法
Create view命令的语法如下:
CREATE [OR REPLACE] VIEW view-name AS
SELECT column(s)
FROM table(s)
[WHERE condition(s)];
在以上语法中,我们具有以下参数:
Parameters | Description |
---|---|
OR REPLACE | The OR REPLACE parameter will replace the view if it already exists. |
The view name | It is the name of the view that we wanted to create. |
WHERE conditions | These conditions are options, and they must be fulfilled for any values which have to be added in the view. |
要在psql中创建视图,我们将执行以下步骤:
步骤1
首先,我们将在本地系统中打开psql ,然后提供密码并登录到psql。
第2步
现在,我们将使用以下命令选择或连接所需的数据库(javatpoint)。
postgres-# \c javatpoint
一旦执行了以上命令,就将连接到javatpoint数据库,如下图所示:
第三步
我们将使用在PostgreSQL教程的前面部分中创建的Book表。
要查看Book表中存在哪些所有列,我们将使用select命令,如下所示:
Select * public."Book";
第四步
现在,我们已经准备好使用CREATE VIEW命令,如下所示创建与书籍表的帮助下图:
CREATE VIEW book_View AS SELECT BookID, Book_cost
FROM public."Book"
where Book_cost > '200';
输出量
一旦执行了以上命令,我们将获得以下消息,即book_view已成功创建。
第5步
之后,我们将使用Select命令来检查book_view中的记录,该记录的值大于200。
SELECT * FROM book_View;
输出量
执行完上述命令后,我们将获得book_cost大于200的那些记录。
尽管Book表具有四个记录,但在这里,我们将获得三个记录,这些记录已添加到特定视图中。
我们正在创建一个视图,该视图借助以下命令仅包含Book表的一列:
CREATE VIEW Book_View2 AS
SELECT book_cost
FROM public."Book"
WHERE book_cost > '225';
输出量
执行完上述命令后,我们将得到以下消息,即book_ view2已成功创建。
book_view2仅包含Book表中的Book_cost列。在这里,我们将使用“选择”命令来查看book_view2视图的数据:
SELECT * FROM book_view2;
输出量
执行完上述命令后,我们将获得成本超过225的那些记录。
要在psql中更改PostgreSQL视图,我们将使用CREATE OR REPLACE VIEW命令,因为可以修改视图的定义而不必将其删除。
更改PostgreSQL视图的语法
在PostgreSQL中更改视图的语法如下:
CREATE OR REPLACE view_name
AS
query
注意:PostgreSQL 9.4之前的版本不支持删除视图中的其余列。如果需要执行此操作,则会收到以下错误消息“ [Err]错误:无法从视图中删除列”。这就是查询必须创建在创建视图时创建的类似列的原因。
详细地,新列需要相似的数据类型,相似的名称,并以与生成它们相似的顺序。但是PostgreSQL允许我们在列列表的末尾添加更多列。
因此,为此,我们需要三个表Book,User1和book_view2来更改PostgreSQL视图。
我们将使用SELECT命令检查Book,User1和book_view2表中存在的记录。
通过使用select命令, Book_view2表如下所示:
Select * from book_view2;
在选择命令的帮助下, Book表如下所示:
Select * from public."Book";
借助Select命令,我们可以在User1表中看到可用的现有数据:
Select * from User1;
例如,在以下命令中,我们将使用“创建”或“替换”视图命令来更新视图book_view2 :
CREATE or REPLACE VIEW book_view2 AS
SELECT book_cost, user_name
FROM public."Book"
INNER JOIN User1
ON public."Book".UserID = User1.UserID
WHERE book_cost > '225';
输出量
执行完上述命令后,我们将获得以下消息窗口,该窗口显示book_view2已成功创建。
现在,在执行上述命令后,我们将使用Select命令来检查操作是否正常进行:
Select * from book_view2;
输出量
一旦执行了上面的命令,我们将获得以下结果,在该结果中,我们可以看到使用JOIN命令时视图已更改,现在,我们从两个不同的表中获得了两列。
要更改视图的定义,我们使用ALTER VIEW命令。
例如,我们可以使用以下语句将视图的名称从book_view2修改为book_info:
ALTER VIEW book_view2 RENAME TO book_info;
输出量
一旦执行了以上命令,我们将获得以下消息窗口,该窗口显示book_view2已成功更改。
如果从book_view2中选择数据,则会得到以下错误,如下面的屏幕截图所示:
要删除PostgreSQL视图,我们可以使用DROP VIEW命令。
句法
drop view命令的语法如下:
DROP VIEW [IF EXISTS] view-name;
在以上语法中,我们具有以下参数:
Parameters | Description |
---|---|
View-name | The view-name parameter is used to specify the name of the view, which we wanted to drop. |
If Exists | It is an optional parameter, and it is only necessary when we don’t define it and try to drop a view which does not exist, we will get an error. |
在这里,我们将使用drop view命令删除在上一节中创建的book_info:
DROP VIEW book_info;
输出量
执行完上述命令后,我们将获得以下消息,该消息显示特定视图已成功删除。