SQL语言学习1探索.ppt

  1. 1、本文档共141页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
例5 定义学生的学号及其平均成绩的视图. /* 分组视图 */ CREATE VIEW G_Stu(Sno, Gavg) AS SELECT Sno, AVG(Grade) FROM SC GROUP BY Sno; 例6 将Student表中所有女生定义为一个视图. CREATE VIEW F_Stu(no, name, sex, age, dept) AS SELECT * /* 不指定属性列 */ FROM Student WHERE Ssex = ‘女’; 如果修改基表Student的结构, F_Stut视图与Student表 的映象关系将被破坏, 导致该视图不能正确工作. 缺陷 3.6.2 查询视图 用户的角度:查询视图与查询基本表相同 DBMS实现视图查询的方法: 视图消解法 进行有效性检查 转换成等价的对基本表的查询 执行修正后的查询 例1 在信息系学生的视图中找出年龄小于20的学生. SELECT Sno, Sage FROM IS_Stu WHERE Sage 20; 转换后的查询语言为: SELECT Sno, Sage FROM Student WHERE Sdept = ‘IS’ AND Sage 20; 例2 查询选修了 1 号课程的信息系学生. SELECT IS_Stu.Sno, Sname FROM IS_Stu, SC WHERE IS_Stu.Sno = SC.Sno AND SC.Cno = ‘1’; 视图消解法的缺陷 有些情况下, 视图查询不能直接转换成表查询! 例3 查询G_Stu视图从平均成绩在90分以上的学生. SELECT * FROM G_Stu WHERE Gavg = 90; CREATE VIEW G_Stu(Sno, Gavg) AS SELECT Sno, AVG(Grade) FROM SC GROUP BY Sno; SELECT Sno, AVG(Grade) FROM SC WHERE AVG(Gavg) = 90 GROUP BY Sno; 直接转换 WHERE不能含聚集函数! 视图消解法的缺陷 有些情况下, 视图查询不能直接转换成表查询! 例3 查询G_Stu视图从平均成绩在90分以上的学生. SELECT * FROM G_Stu WHERE Gavg = 90; SELECT Sno, AVG(Grade) FROM SC GROUP BY Sno HAVING AVG(Grade) = 90; 直接对基本表查询 3.6.3 更新视图 更新视图 通过对视图的插入、删除和修改来更新基本表的数据 原理 把对视图的更新操作转换为对基本表的更新操作 视图的修改数据 例1 把信息系学生的视图中学号为 200815002 的 学生改名为 “刘辰”. UPDATE IS_Stu SET Sname = ‘刘辰’ WHERE Sno = ‘200815002’; 转换为对基本表的更新: UPDATE Student SET Sname = ‘刘辰’ WHERE Sno = ‘200815002’ AND Sdept = ‘IS’; 视图的插入数据 例2 向信息系学生的视图中插入一位新同学的记录 (200815021, 赵新, 20). INSERT INTO IS_Stu VALUES (‘200815021’, ‘赵新’, 20); 转换为对基本表的更新: INSERT INTO Student(Sno, Sname, Sage, Sdept) VALUES (‘200815021’, ‘赵新’, 20, ‘IS’); 视图的删除数据 例3 删除信息系学生的视图中学号为 200815002 的 记录. DELETE FROM IS_Stu WHERE Sno = ‘200815002’; 转换为对基本表的更新: DELETE FROM IS_Stu WHERE Sno = ‘200815002’ AND Sdept = ‘IS’; 更新视图的限制 一些视图是不可更新的 因为对这些视图的更新不能唯一有意义地转换成对相应基本表的更新 例: G_Stu 视图 UPDATE G_Stu SET Gavg = 90 WHERE Sno = ‘200815001’ CREATE VIEW G_Stu(Sn

文档评论(0)

***** + 关注
实名认证
内容提供者

我是自由职业者,从事文档的创作工作。

1亿VIP精品文档

相关文档