视图时虚拟的表,它与包含数据的表不一样,视图只是封装了SQL查询后的结果图
一、视图的创建
- 使用CREATE VIEW语句来创建视图
- 使用SHOW CREATE VIEW viewname,来查看创建视图的语句
- 使用DROP VIEW viewname 来删除视图
- 更新视图可以先DROP再用CREATE。也可以直接用CREATE OR REPLACE VIEW viewname,如果要更新的视图不存在则第二条更新语句会创建一个视图,如果存在则替换掉原来的视图
二、使用视图
1、使用视图封装复杂的联结
CREATE VIEW productcustomer 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
这条语句创建了一个名为productcustomer的视图,它联结三个表,返回已订购物品的客户列表。
下面可以直接使用视图检索订购了TNT2的客户可以看出视图极大的简化了复杂的SQL语句的使用,利用视图,可以一次性编写基础的SQL,然后可复用
SELECT * FROM productcustomer WHERE prod_id = 'TNT2'
2、使用视图重新格式化检索出的数据
视图的另一种常见用途时重新格式化检索出的数据。下面的SELECT时返回供应商名和位置
SELECT CONCAT(vend_name,'(',RTRIM(vend_country),')') AS vend_title
FROM vendors
ORDER BY vend_name
如果这个格式被经常使用,则可以为此创建一个视图,每次使用这个视图就行了。
CREATE VIEW vendorlocation AS
SELECT CONCAT(vend_name,'(',RTRIM(vend_country),')') AS vend_title
FROM vendors
ORDER BY vend_name
以后每次需要使用时,只需查询视图即可
SELECT * FROM vendorlocation
3、使用视图过滤不想要的数据
定义一个视图,过滤没有电子邮件地址的客户,这样在发送电子邮件到邮件列表时,可以排除那些没有电子邮件地址的用户
CREATE VIEW customeremaillist AS
SELECT * FROM customers
WHERE cust_email IS NOT NULL
4、使用视图与计算字段
创建一个视图orderitemstotal ,它检索计算每种物品的总价
CREATE VIEW orderitemstotal AS
SELECT
order_num,
prod_id,
quantity,
item_price,
quantity * item_price AS total_price
FROM orderitems
下面我们可以检索订单20005的详细内容
SELECT * FROM orderitemstotal
WHERE order_num = 20005
三、更新视图
一般视图的作用是用来简化检索,而不用于更新。
但是视图也是可更新的,可以对它们使用INSERT\UPDATE和DELETE.更新视图将更新其基表,
如果视图定义中有以下操作,则不能进行视图更新
- 分组
- 联结
- 子查询
- 并
- 聚集函数
- DISTINCT
- 导出列