- 1、本文档共48页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据库原理与应用(第2版)
人民邮电出版社
第5章 视图和索引
5.1 视图
5.2 索引
5.1 视图
5.1.1 基本概念
5.1.2 定义视图
5.1.3 通过视图查询数据
5.1.4 修改和删除视图
5.1.5 视图的作用
5.1.1 基本概念
视图是由从数据库的基本表中选取出来的数据组成的逻辑窗口,是基本表的部分行和列数据的组合。
视图是一个虚表。数据库中只存放视图的定义,而不存放视图包含的数据,这些数据仍存放在原来的基本表中。
基本表中的数据如果发生变化,从视图中查询出的数据也会随之变化。
基本概念(续)
视图可以从一个基本表中提取数据,也可以从多个基本表中提取数据,甚至还可以从其他视图中提取数据,构成新的视图。
对视图数据的操作最终都会转换为对基本表的操作。
基本概念(续)
5.1.2 定义视图
定义视图的格式如下:
CREATE VIEW 视图名 [(列名[ ,...n ] )]
AS
查询语句
查询语句中通常不包含ORDER BY和DISTINCT子句。
在定义视图时要么指定视图的全部列名,要么全部省略不写,不能只写视图的部分列名。
必须明确指定视图所有列名的情况
某个目标列不是简单的列名,而是函数或表达式。
多表连接时选出了几个同名列作为视图的字段。
需要在视图中为某个列选用新的更合适的列名。
1.定义单源表视图
视图的数据取自一个表的部分行和列。
例1 建立查询信息管理系学生的学号、姓名、性别和年龄的视图。
CREATE VIEW IS_Student
AS
SELECT Sno, Sname, Ssex, Sage
FROM Student
WHERE Sdept = 信息管理系
2.定义多源表视图
例2 建立信息管理系选修了C001课程的学生的学号、姓名和成绩的视图。
CREATE VIEW V_IS_S1(Sno, Sname, Grade)
AS
SELECT Student.Sno, Sname, Grade
FROM Student JOIN SC
ON Student.Sno = SC.Sno
WHERE Sdept = 信息管理系
AND SC.Cno = C001
例8
3.在已有视图上定义新视图
例3 利用例1建立的视图,建立查询信息管理系年龄小于20的学生的学号、姓名和年龄的视图。
CREATE VIEW IS_Student_Sage
AS
SELECT Sno, Sname, Sage
FROM IS_Student WHERE Sage 20
IS_Student
视图的来源是视图和基本表的组合
例4 在例1所建的视图基础上,例2的视图定义可改为:
CREATE VIEW V_IS_S2(Sno, Sname, Grade)
AS
SELECT SC.Sno, Sname, Grade
FROM IS_Student JOIN SC
ON IS_Student.Sno = SC.Sno
WHERE Cno = C001
4.定义带表达式的视图
在定义视图时可以根据需要设置一些派生属性列,在这些派生属性列中保存经过计算的值。
这些派生属性被称为虚拟列。
包含虚拟列的视图也称为带表达式的视图。
例5 定义一个查询学生出生年份的视图。
CREATE VIEW BT_S(Sno, Sname, Sbirth)
AS
SELECT Sno, Sname, 2011-Sage
FROM Student
5.含分组统计信息的视图
定义视图的查询语句中含有GROUP BY子句,这样的视图只能用于查询,不能用于修改数据。
例6 定义一个查询每个学生的学号及平均成绩的视图。
CREATE VIEW S_G(Sno, AverageGrade)
AS
SELECT Sno, AVG(Grade) FROM SC
GROUP BY Sno
5.1.3 通过视图查询数据
通过视图查询数据同基本表一样。
例7 利用例1建立的视图,查询信息管理系男生的信息。
SELECT * FROM IS_Student
WHERE Ssex = 男
最终转换成的实际查询:
SELECT Sno, Sname, Ssex, Sage
FROM Student
WHERE Sdept = 信息管理系
AND Ssex = 男
通过视图查询数据(续)
例8 查询信息管理系选修了C001课程且成绩大于等于60的学生的学号、姓名和成绩。
SELECT * FROM V_I
文档评论(0)