执行一条SQL,将结果集保存在一张虚拟表中mysql
注意事项
• 在视图建立后,能够用与表基本相同的方式使用(查询、过滤、排序数据、与其余视图或连结、(添加、更新))
• 视图只是用来查看存储在别处的数据的设施,自己不包含数据,返回的数据也是从其余表检索出来的。
• 由于视图自己不包含数据,索引多个表连结或嵌套可能存在性能问题,需测试sql
建立视图函数
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';
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;
能够直接经过视图查询得出结果code
SELECT * FROM vendorlocations;
排序
create view custmeremaillist AS SELECT cust_id ,cust_name,cust_email from customers where cust_email is not NULL;
直接使用视图索引
SELECT * from custmeremaillist ;
mysql查询rem
SELECT prod_id, quantity, item_price, quantity * item_price AS expanded_price FROM orderitems WHERE order_num=20005;
建立视图it
CREATE VIEW orderitemsexpanded AS SELECT order_num, prod_id, quantity, item_price, quantity * item_price AS expanded_price FROM orderitems WHERE order_num=20005;
使用视图
SELECT * FROM orderitemsexpanded WHERE order_num=20005;
一般,视图是能够更新的(insert、update、delete)。更新视图将更新基表。若是视图中有如下定义将不能被更新。
1. 分组(group by 和 having) 2. 联结 3. 自查询 4. 并 5. 聚合函数(min()、count()、sum()等) 6. Distinct 7. 导出(计算)列
因此视图最好直接使用select查询
以上内容均引自《mysql必知必会》