视图

发布时间 2023-09-22 16:39:00作者: zheng-s

视图✅

视图仅仅是用来查看存储在别处数据的一种设施。视图本身不包含数据,因此返回的数据是从其他表中检索出来的。在添加或更改这些表中的数据时,视图将返回改变过的数据。

视图可以浅薄理解为程序项目的方法,调用什么方法,得到什么结果。

因为视图不包含数据,所以每次使用视图时,都必须处理查询执行时

需要的所有检索。如果你用多个联结和过滤创建了复杂的视图或者嵌

套了视图,性能可能会下降得很厉害。因此,在部署使用了大量视图

的应用前,应该进行测试。

利用视图简化复杂的联结

CREATE VIEW ProductCustomers AS
SELECT cust_name, cust_contact, prod_id
FROM Customers, Orders, OrderItems
WHERE Customers.cust_id = Orders.cust_id
AND OrderItems.order_num = Orders.order_num;

这条语句创建一个名为 ProductCustomers 的视图,它联结三个表,返回已订购了任意产品的所有顾客的列表。如果执行 SELECT * FROM ProductCustomers,将列出订购了任意产品的顾客

检索订购了产品 RGAN01 的顾客,可如下进行:

SELECT cust_name, cust_contact
FROM ProductCustomers
WHERE prod_id = 'RGAN01';

就相当于程序中的方法:有如下功能

使用视图与计算字段

SELECT prod_id,
 quantity,
 item_price,
 quantity*item_price AS expanded_price
FROM OrderItems
WHERE order_num = 20008;

image-20230918153623974

CREATE VIEW OrderItemsExpanded AS
SELECT order_num,
 prod_id,
 quantity,
 item_price,
 quantity*item_price AS expanded_price
FROM OrderItems

视图过滤不想要的数据

。。

用视图重新格式化检索出的数据

SELECT RTRIM(vend_name) + ' (' + RTRIM(vend_country) + ')'
 AS vend_title
FROM Vendors
ORDER BY vend_name;

image-20230918153816023

CREATE VIEW VendorLocations AS
SELECT RTRIM(vend_name) + ' (' + RTRIM(vend_country) + ')'
 AS vend_title
FROM Vendors;

说白了就是sql语句构成的可以重复调用的方法,方便使用