文章目录
  1. 视图的优点
  2. 视图的限制
  3. 创建视图
    1. 利用视图简化复杂的联结
    2. 利用视图重新格式化检索数据
    3. 视图与计算字段

视图为虚拟的表,它包含的不是数据而是根据需要检索数据的查询。视图可用来简化数据处理。

如对下面的SELECT语句。

1
2
3
4
5
SELECT cust_name, cust_contact
FROM Customers, Orders, OrderItems
WHERE Customers.cust_id=Orders.cust_id
AND OrderItems.order_num=Orders.order_num
AND prod_id='RGAN01';

若将除最后一行外的所有查询包装为一个虚拟表ProCust,则检索简化为。

1
2
SELECT cust_name, cust_contact
FROM ProCust WHERE prod_id='RGAN01';

视图的优点

视图有如下优点。

 

对视图的使用与对表的使用相同。

视图的限制

视图的创建与使用有如下限制。

 

创建视图

使用CREATE VIEW语句来创建,使用DROP VIEW删除视图,要更新视图,必须先DROP它然后再重新创建它。

利用视图简化复杂的联结

上述具体的视图ProCust的创建如下。

1
2
3
4
5
CREATE VIEW ProCust 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;

利用视图,可一次性编写基础的SQL语句,再根据需要多次使用。

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

如之前使用的SQL语句如下

1
SELECT CONCAT(vend_name, '(', vend_country, ')') FROM Vendors ORDER BY vend_name;

将此查询定义为视图

1
2
CREATE VIEW VenLoc AS
SELECT CONCAT(vend_name, '(', vend_country, ')') AS vend_title FROM Vendors;

也可以将视图应用于WHERE子句。

视图与计算字段

视图也可以简化计算字段的使用,如之前使用的SQL语句如下。

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

现将其转换为一个视图。

1
2
CREATE VIEW OrderItemsEx AS
SELECT order_num, prod_id, quantity, item_price, quantity*item_price AS ex_price FROM OrderItems;