1、什么是视图
执行一条SQL,将结果集保存在一张虚拟表中
2、为什么要使用视图
- 重复利用SQL语句
- 简化SQL查询,快速取数据
- 只用知道表的部分结构
- 保护数据,根据特定授权
- 更改数据格式和表示,视图可返回与底层表的表示和格式不同的数据。
注意事项
• 在视图创建后,可以用与表基本相同的方式使用(查询、过滤、排序数据、与其他视图或连结、(添加、更新))
• 视图只是用来查看存储在别处的数据的设施,本身不包含数据,返回的数据也是从其他表检索出来的。
• 因为视图本身不包含数据,索引多个表连结或嵌套可能存在性能问题,需测试
3、规则和限制
- 表名必须唯一(与其他视图和表)
- 创建视图没有限制
- 足够权限
- 视图可以嵌套,可以从其他视图查询来构造一个视图
- 如果视图和从视图中查询都有order by,视图中的order by将被覆盖
- 视图不能索引
- 视图可以和表一起使用
4、使用视图
- 创建视图 create view
- 查看创建视图的语句。Show create view viewname
- 删除视图 drop view viewname
- 更新视图,1⃣️ 先drop后create 2⃣️ 直接用create or replace view
- 利用视图简化复杂的联结查询
5、利用视图简化复杂的联结查询
创建视图
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
使用视图
SELECT cust_name, cust_contact
FROM productcustomers
WHERE prod_id = 'TNT2';
6、用视图重新格式化检索出的数据
select concat (rtrim(vend_name) , '(',rtrim(vend_country),')') as vend_title from vendors order by vend_name;
如果经常用到这个格式的话,可以创建一个视图
CREATE VIEW vendorlocations AS
SELECT
concat ( rtrim( vend_name ), '(', rtrim( vend_country ), ')' ) AS vend_title
FROM
vendors
ORDER BY
vend_name;
可以直接通过视图查询得出结果
SELECT * FROM vendorlocations;