视图
使用场景:
- 重用SQL语句
- 简化复杂的SQL操作。在编写查询后,可以方便地重用它而不必知道它的基本查询细节
- 使用表的组成部分而不是整个表
- 保护数据。可以给用户授予表的特定部分的访问权限而不是整个表的访问权限
- 更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据
使用:
- 视图用
CREATE VIEW
语句来创建 - 使用
SHOW CREATE VIEW viewname
;来查看创建视图的语句 - 用 DROP 删除视图,其语法为
DROP VIEW viewname
- 更新视图时,可以先用DROP再用CREATE,也可以直接用CREATE OR
REPLACE VIEW。如果要更新的视图不存在,则第 2 条更新语句会创建一个视图;如果要更新的视图存在,则第 2 条更新语句会替换原有视图
-- 利用视图简化复杂的联结
CREATE VIEW productscustomers AS
SELECT cust_name, cust_contact, prod_id
FROM customers, orders, orderitems
WHERE orders.cust_id = customers.cust_id AND orders.order_num = orderitems.order_num; -- 返回订购任意产品的所有顾客
SELECT * FROM productscustomers WHERE prod_id = 'RGAN01'; -- 返回订购了RGAN01的所有顾客
-- 利用视图重新格式化检索出的数据
CREATE VIEW VendorLocation AS
SELECT CONCAT(vend_name,' (', vend_country, ')') AS vend_title
FROM vendors;
SELECT * FROM vendorlocation;
-- 使用视图过滤不要的数据
CREATE VIEW CustEmailList AS
SELECT cust_id, cust_name, cust_email
FROM customers WHERE cust_email IS NOT NULL;
SELECT * FROM CustEmailList;
-- 使用视图与计算字段
CREATE VIEW OrderItemsExpanded AS
SELECT order_num, prod_id, quantity, item_price, quantity*item_price AS expanded_price
FROM orderitems;
SELECT * FROM OrderItemsExpanded WHERE order_num = 20008;
《SQL必知必会》系列索引: