第十八课 使用视图
来源:互联网 发布:数据分析师前景如何 编辑:程序博客网 时间:2024/05/22 06:19
第十八课 使用视图
预习与回顾:
第十七课学习了CREATE TABLE用来创建新表,ALTER TABLE用来更改表列(或其他诸如约束或索引等对象)以及DROP TABLE用来完整地删除一个表;第十八课将学习什么是视图,它们怎样工作,何时使用它们以及如何利用视图简化前几课中执行的某些SQL操作。
18.1、视图
视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。
输入▼
SELECT cust_name, cust_contact
FROM Customers, Orders,OrderItems
WHERECustomers.cust_id = Orders.cust_id
AND OrderItems.order_num = Orders.order_num
AND prod_id = 'RGAN01';检索订购了某种产品的顾客。
把整个查询包装成一个名为ProductCustomers的虚拟表:
输入▼
SELECT cust_name, cust_contact
FROM ProductCustomers
WHERE prod_id= 'RGAN01';ProductCustomers是一个视图,作为视图,它不包含任何列或数据,包含的是一个查询。
18.1.1、为什么使用视图
1、重用SQL语句。
2、简化复杂的SQL操作。在编写查询后,可以方便地重用它而不必知道其基本查询细节。
3、使用表的一部分而不是整个表。
4、保护数据。可以授予用户访问表的特定部分的权限,而不是整个表的访问权限。
5、更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据。
视图仅仅是用来查看存储在别处数据的一种设施。视图本身不包含数据,因此返回的数据是从其他表中检索出来的。在添加或更改这些表中的数据时,视图将返回改变过的数据。
18.1.2、视图的规则与限制
1、与表一样,视图必须唯一命名(不能给视图取与别的视图或表相同的名字)。
2、对于可以创建的视图数目没有限制。
3、创建视图,必须具有足够的访问权限。
4、视图可以嵌套,即可以利用从其他视图中检索数据的查询来构造视图。
5、许多DBMS禁止在视图查询中使用ORDER BY子句。
6、有些DBMS要求对返回的所有列进行命名,如果列是计算字段,则需要使用别名。
7、视图不能索引,也不能有关联的触发器或默认值。
8、有些DBMS把视图作为只读的查询,这表示可以从视图检索数据,但不能将数据写回底层表。
9、有些DBMS允许创建这样的视图,它不能进行导致行不再属于视图的插入或更新。
18.2、创建视图
CREATE VIEW语句来创建---CREATE VIEW只能用于创建不存在的视图。
说明:视图重命名
删除视图,可以使用DROP语句,其语法为DROP VIEW viewname;。
覆盖(或更新)视图,必须先删除它,然后再重新创建。
18.2.1、利用视图简化复杂的联结
隐藏复杂的SQL,这通常涉及联结。
输入▼
CREATE VIEW ProductCustomers AS
SELECT cust_name,cust_contact, prod_id
FROMCustomers, Orders, OrderItems
WHERE Customers.cust_id = Orders.cust_id
AND OrderItems.order_num = Orders.order_num;
创建一个名为ProductCustomers的视图,它联结三个表,返回已订购了任意产品的所有顾客的列表
检索订购了产品RGAN01的顾客:
输入▼
SELECT cust_name, cust_contact
FROM ProductCustomers
WHERE prod_id= 'RGAN01';
利用视图,可一次性编写基础的SQL,然后根据需要多次使用。
18.2.2、利用视图重新格式化检索出的数据
在单个组合计算列中返回供应商名和位置:
语法回顾:
输入▼
SELECT RTRIM(vend_name) + ' (' + RTRIM(vend_country) + ')'
AS vend_title
FROM Vendors
ORDER BYvend_name;
使用||语法的相同语句:
输入▼
SELECT RTRIM(vend_name) || ' (' || RTRIM(vend_country) || ')'
AS vend_title
FROM Vendors
ORDER BYvend_name;
视图创建
输入▼
CREATE VIEW VendorLocations AS
SELECT RTRIM(vend_name) +' (' + RTRIM(vend_country) + ')'
AS vend_title
FROM Vendors;
使用||语法的相同语句:
输入▼
CREATE VIEW VendorLocations AS
SELECT RTRIM(vend_name) || ' (' ||RTRIM(vend_country) || ')'
ASvend_title
FROM Vendors;
SELECT * FROMVendorLocations;
18.2.3、使用视图过滤不想要的数据
输入▼
CREATE VIEW CustomerEMailList AS
SELECT cust_id,cust_name, cust_email
FROMCustomers
WHERE cust_email IS NOTNULL;---在将电子邮件发送到邮件列表时,需要排除没有电子邮件地址的用户。
SELECT *
FROM CustomerEMailList;
18.2.4、使用视图与计算字段
检索某个订单中的物品,计算每种物品的总价格:
输入▼
SELECT prod_id,
quantity,
item_price,
quantity*item_price ASexpanded_price
FROM OrderItems
WHERE order_num = 20008;
转换为视图
输入▼
CREATE VIEW OrderItemsExpanded AS
SELECT order_num,
prod_id,
quantity,
item_price,
quantity*item_priceAS expanded_price
FROM OrderItems;
SELECT *
FROM OrderItemsExpanded
WHERE order_num = 20008;
- 第十八课 使用视图
- SQL必知必会 笔记 第十八章 使用视图
- 第十八课:函数
- 第十八课 接口
- 第十八课 数学库
- Android第十八课;ListView
- 2017.11.27第十八课
- 第十八
- 孙鑫 第十八课ActiveX控件
- 实体数据模型(第十八课)
- 韩语学习之第十八课
- java程序员第十八课 -JDBC02
- Struts2第十八课:FreeMarker语法知识
- Struts2第十八课:FreeMarker语法知识
- 2013-05-05《第十八课情景对话》
- OpenGL教程翻译 第十八课 漫反射光
- 第十八课:公告板与粒子1
- 第十八课:公告板与粒子2
- [qbxt考试Day2.T1] video
- 决策树学习笔记
- 如何理解html,xml,json作用
- PAT 甲级 1073. Scientific Notation (20)
- TCP粘包,拆包
- 第十八课 使用视图
- bzoj 2464 中山市选[2009]小明的游戏
- scanf gets getchar cin cin.get getline 总结
- poj 1436 Horizontally Visible Segments
- 第十章g2o_custombundle中的common文件夹中的BundleParams.h
- 使用DrawerLayout+Toolbar实现侧滑菜单
- 机器学习面试问题
- 机器学习笔记--决策树&决策树可视化
- c++笔记:(2)