第五章_数据库教案SQL语言(1)_第1页
第五章_数据库教案SQL语言(1)_第2页
第五章_数据库教案SQL语言(1)_第3页
第五章_数据库教案SQL语言(1)_第4页
第五章_数据库教案SQL语言(1)_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

在18岁以上水手中,对于每个rating级别中最少有两个水手以上的组中最年轻水手的年龄,查找每条红色船只被租用的次数,在三个关系连接之上的一个分组操作 如果去掉颜色选择条件,查询结果如何? 如果去掉Sailors和与S.sid相关的条件,情况会怎么样?,在18岁以上水手中,对于每个rating级别中最少有两个水手以上的组中最年轻水手的年龄(子查询),Having子句中也可以包含子查询 Having子句可以为Count(*) 1,SQL数据操纵功能(更新),数据插入 数据删除 数据修改,数据插入,单记录插入 insert into Students values(95020, 陈东, 男, 18,IS) insert into SC(Sno, Cno) values(95020, 1) 多记录插入(插入子查询结果) 假定数据库中有表: deptage(Sdept char(15), Avgage smallint) insert into deptage ( sdept, avgage ) select Sdept, avg( Sage ) from Students group by Sdept,数据删除,delete from Students where Sno = 95019 delete from SC 带有子查询的删除 delete from SC where CS = ( select Sdept from Students where Students.Sno = SC.Sno ) 王立同学因病休学,请将王立的选课记录删去 (思考题),数据修改,update Students set Sage = 22 where Sno= 95001 update Students set Sage = Sage + 1 带有子查询的修改 update SC set G = 0 where MA = ( select Sdept from Students where Sno=SC.Sno ),更新操作与数据库的一致性,更新操作只对一个表操作, 但实际中可能: 例如: 请删除学号为95019的学生, 隐含将其所有选课记录删去 delete from students where Sno=95019; delete from SC where Sno=95019; 如果建表时, 说明SC参照Students存在, 则此删除失败,更新操作与数据库的一致性,数据库提供事务概念处理这类问题 如果建表时, 说明SC参照Students存在, 且说明on delete cascade, 则只要 delete from students where Sno=95019; 便可将95019的选课记录全部删去,视图,视图是从一个或几个基本表(视图)导出的表 视图是虚表:数据库中只存放视图的定义(存放于数据字典中),不存放视图对应的数据 视图也称动态窗口: 视图可以和基本表一样被查询,被删除 视图的更新是有一定限制的,视图定义,例子:建立信息系学生的视图 create view IS_Students as select * from Students where Sdept=IS create view IS_Students(No, Name, Dept) as select Sno, Sname, Sdept from Students where Sdept=IS 行列子集视图:从单个基本表导出,去掉了一些行和列,但保留了码,?视图的属性名,13,14,视图定义,视图的属性或者全部指定,或者全部不指定 换名 某个目标列是集函数或列表达式 多表连接时有几个同名列需要区分 例子:将学生的学号及它的平均成绩定义为一个视图 create view avgGrade(Sno, avgG) as select Sno, avg(Grade) from SC group by Sno,虚拟列,视图定义,例子:建立信息系选修了1号课程且成绩在90分以上的学生的视图 Create view IS_Students(Sno, Sname, Grade) as select Students.Sno, Sname, Grade from Students, SC where Students.Sno=SC.Sno and Cno=1 and Grade90; with check option子句(问题) create view IS_Students as select * from Students where Sdept=IS with check option;,删除视图,语句格式:DROP VIEW ; 将视图定义从数据字典中删除,且由该视图导出的视图均失效,要从数据字典中将失效的视图都删除,以免用户使用错误 例如: DROP VIEW IS_Student; 思考:若删除了基本表,由基本表导出的视图又如何?,查询视图,视图查询执行过程: 把定义中的子查询和用户查询结合起来, 转化成等价的对基本表的查询 例子: 在信息系的学生中找到年龄小于20岁的学生 select * from IS_Students where Sage20; 转换后的查询为(系统完成): select * from Students where Sdept=IS and Sage20; 查询信息系选修了1号课程的学生姓名和成绩 select Sname, Grade from IS_Students, SC where IS_Students.Sno=SC.Sno and Cno=1;,查询视图,对视图的查询有些是不能直接进行转换的 例子: 在avgGrade视图中, 查询平均成绩在90分以上的学生学号和平均成绩 select * from avgGrade where avgG=90; 转换: select Sno, avg(Grade) from SC where avg(Grade90) group by Sno;,?,视图更新,对视图更新最终转换成对基本表的更新 将信息系学生学号为95002的学生姓名改为“刘辰” update IS_Students set Sname=刘辰 where Sno=95002; 通过视图IS_Students插入一信息系的学生记录 insert into IS_Students values(95029, 赵新, 女, 20); with check option子句,视图更新,删除信息系学号为95029的记录 delete from IS_Students where Sno=95029; 行列子集视图是可以更新的, DB2例子p127 视图的作用: 简化用户的操作 视图使用户能以多种角度看待同一数据 视图可以对机密数据提供一定的安全保护,视图的作用,视图对数据库重构提供了一定程度的逻辑独立性 例如: Students(Sno, Sname, Ssex, Sage, Sdept) 分为: S1(Sno, Sname, Sage) S2(Sno, Ssex, Sdept) 但在Students上已有开发了多个应用, 为了达到不改变应用程序的目的, 可以建视图Students: create view Students(Sno, Sname, Ssex, Sage, Sdept) as select S1.Sno, S1.Sname, S2.Ssex, S1.Sage, S2.Sdept from S1, S2 where S1.Sno=S2.Sno;,视图更新,由两个以上基本表导出的视图不允许更新; 来自于字段表达式或常数的视图字段不允许进行insert和update操作,但允许delete操作; 不允许更新集函数视图字段; 不允许更新含有group by或di

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论