第十八课
这一课介绍什么是视图,它们怎样工作,何时使用它们;还讲述如何使用视图简化前几课中执行的某些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 = 'RGAN01'; create view vendorlocations as select rtrim(vend_name) + '(' + rtrim(vend_country) + ')' as vend_title from vendors; select * from vendorlocations; create view customeremaillist as select cust_id, cust_name, cust_email from Customers where cust_email is not null; select * from customeremaillist; 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;
1. 视图是虚拟的表。与包含数据的表不一样,视图只包含使用动态检索数据的查询
2. 视图的一些常见应用:
- 重用SQL语句
- 简化复杂的SQL操作
- 使用表的一部分而不是全部表
- 保护数据
- 更改数据格式和表示,视图可以返回与底层表的表示和格式不同的数据
3. 创建视图之后,可以用与表基本相同的方式使用它们
4. 视图返回的数据是从其他表中检索出来的,在改变这些表的数据时,视图将返回改变过的数据
5. 在部署使用了大量视图的应用前,应该进行测试
6. 视图创建和使用的一些最常见规则和限制
- 与表一样,视图必须唯一命名
- 对于可以创建的视图数目没有限制
- 创建视图必须要有足够的访问权限
- 视图可以嵌套,即可以利用从其他视图中检索数据的查询来构造视图
- 许多DBMS禁止在视图查询中使用ORDER BY子句
- 有些DBMS要求对返回的所有列进行命名
- 视图不能索引,也不能有关联的触发器或默认值
- 有些DBMS把视图作为只读的查询,这表示可以从视图检索数据,但不能把数据写回底层表
- 有些DBMS允许创建这样的视图,它不能进行导致行不再属于视图的插入或更新
7. 视图用CREATE VIEW语句来创建,用DROP VIEW语句来删除视图,覆盖(或更新)视图,必须先删除它,然后在重新创建
8. 扩展视图的范围可以使得它被重用,而且可能更有用
9. 从视图检索数据时如果使用了一条WHERE子句,则两组子句将自动组合
小结:视图为虚拟的表。它们包含的不是数据而是需要检索数据的查询。视图提供了一种封装SELECT语句的层次,可用来简化数据处理,重新格式化或保护基础数据
第十九课
这一课介绍什么是存储过程,为什么要使用存储过程,如何使用存储过程,以及创建和使用存储过程的基本语法
主要代码如下:
1. 简单来说,存储过程就是为以后使用而保存的一条或多条SQL语句。可将其视为批文件,虽然它们的作用不仅限于批处理
2. 使用存储过程的主要原因
- 通过把处理封装在一个易用的单元中,可以简化复杂的操作
- 由于不要求反复建立一系列处理步骤,因而保证了数据的一致性
- 简化对变动的管理
- DBMS处理命令所需的工作量少,提高了性能
- 存在只能用在单个请求中的SQL元素和特性,存储过程可以使用它们来编写功能更强更灵活的代码
3. 缺陷
- 不同DBMS中的存储过程语法有所不同
- 一般来说,编写存储过程比编写基本SQL语句复杂,需要更高的技能,更丰富的经验
4.