视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态数据的查询。不是很严密的来说视图就是一个动态运行的查询,例子如下:
SELECT cust_name,cust_contact
FROM Customers,Orders,OrderItems
WHERE Customers.cust_id = Orders.cust_id
AND OrdersItems.order_num = Orders.order_num
AND prod_id = 'RAGN01';
#如果使用以上方式查询订购了某种产品的顾客,需要理解相关的表结构,指导如何创建查询和表进行联结。可以把整个查询包装成一个名为ProductCustomers的虚拟表,就可以使用以下方式
SELECT cust_name,cust_contact
FORM ProductCustomers
WHERE prod_id = 'RAGN01';
#ProductCustomers是一个视图,不包含任何列或数据,包含的是一个查询。
为甚么要用到视图:
1. 重用SQL语句;
2. 简化复杂SQL操作,编写查询后,可以方便地重用它而不必知道细节;
3. 使用表的一部分而不是整个表;
4. 保护数据,通过权限管理
5. 更改数据格式与表示,视图可以返回与底层表的表示和格式不同的数据。
创建于删除视图:
1. 删除很简单 DROP VIEW view_name;
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;
(2). 用视图重新格式化检索出的数据
CREATE VIEW vendorLocations AS
SELECT CONCAT(vend_name,' (',vend_country,')') AS vend_title
FROM Vendors;
(3). 用视图过滤不想要的数据
CREATE VIEW CustomerEMailList AS
SELECT cust_id,cust_name,cust_email
FROM Customers
WHERE csut_email IS NOT NULL;
(4). 使用视图与计算字段
CREATE VIEW OederItemsExpanded AS
SELECT order_item,
prod_id,
quantity,
item_price,
quantity*item_price AS expanded_price
FROM OrderItems;
正确使用视图,可以极大简化数据的处理。