18 视图

18.1 视图

视图是虚拟的表,本身不包含数据,也就不能对其进行索引操作。

对视图的操作和对普通表的操作一样。

视图具有如下好处:

  • 简化复杂的 SQL 操作,比如复杂的连接;
  • 只使用实际表的一部分数据;
  • 通过只给用户访问视图的权限,保证数据的安全性;
  • 更改数据格式和表示。

18.2 使用视图

  • 视图用CREATE VIEW语句来创建。
  • 使用SHOW CREATE VIEW viewname;来查看创建视图的语句。
  • DROP删除视图,其语法为DROP VIEW viewname;
  • 更新视图时,可以先用DROP再用CREATE,也可以直接用CREATE ORREPLACE VIEW。如果要更新的视图不存在,则第2条更新语句会创建一个视图;如果要更新的视图存在,则第2条更新语句会替换原有视图。

18.2.1 利用视图简化复杂的联结 

看这样一个例子:

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,将列出订购了任意产品的客户。
为检索订购了产品TNT2的客户,可如下进行:

SELECT cust_name, cust_contact
FROM productcustomers 
WHERE prod_id = ' TNT2';

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

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

创建方式和上一小节类似,都是在开头使用 CREATE VIEW viewname AS

CREATE VIEW vendorlocations AS 
SELECT Contact(RTRIM(vend_name) '(' RTRIM(vend_country) ')') 
AS vend_title
FROM vendors;

18.2.3 用视图过滤不想要的数据

CREATE VIEW customeremaillist AS 
SELECT cust_id, cust_name, cust_email
FROM customers
WHERE cust_email IS NOT NULL;

18.2.4 使用视图与计算字段

CREATE VIEW orderitemsexpanded AS 
SELECT order_num,
       prod_id,
       quantity,
       item_price,
       quantity * item_price AS expanded_price
FROM orderitems;
原文地址:https://www.cnblogs.com/xlzfdddd/p/10169266.html