第五章数据库教案SQ L语 言1

上传人:w****i 文档编号:91052551 上传时间:2019-06-21 格式:PPT 页数:21 大小:240KB
返回 下载 相关 举报
第五章数据库教案SQ L语 言1_第1页
第1页 / 共21页
第五章数据库教案SQ L语 言1_第2页
第2页 / 共21页
第五章数据库教案SQ L语 言1_第3页
第3页 / 共21页
第五章数据库教案SQ L语 言1_第4页
第4页 / 共21页
第五章数据库教案SQ L语 言1_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《第五章数据库教案SQ L语 言1》由会员分享,可在线阅读,更多相关《第五章数据库教案SQ L语 言1(21页珍藏版)》请在金锄头文库上搜索。

1、在18岁以上水手中,对于每个rating级别中最少有两个水手以上的组中最年轻水手的年龄,查找每条红色船只被租用的次数,在三个关系连接之上的一个分组操作 如果去掉颜色选择条件,查询结果如何? 如果去掉Sailors和与S.sid相关的条件,情况会怎么样?,在18岁以上水手中,对于每个rating级别中最少有两个水手以上的组中最年轻水手的年龄(子查询),Having子句中也可以包含子查询 Having子句可以为Count(*) 1,SQL数据操纵功能(更新),数据插入 数据删除 数据修改,数据插入,单记录插入 insert into Students values(95020, 陈东, 男, 18

2、,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 =

3、( 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 ),更新操作与数据库的一致性,更新操作只对一个表操作, 但实际中可能: 例如:

4、请删除学号为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的选课记录全部删去,视图,视图是从一个或几个基本表(视图)导出的表 视图是虚表:数据库

5、中只存放视图的定义(存放于数据字典中),不存放视图对应的数据 视图也称动态窗口: 视图可以和基本表一样被查询,被删除 视图的更新是有一定限制的,视图定义,例子:建立信息系学生的视图 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,视图

6、定义,视图的属性或者全部指定,或者全部不指定 换名 某个目标列是集函数或列表达式 多表连接时有几个同名列需要区分 例子:将学生的学号及它的平均成绩定义为一个视图 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 wh

7、ere 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; 思考:若删除了基本表,由基本表导出的视图又如何?,查询视图,视图查询执行过程: 把定义

8、中的子查询和用户查询结合起来, 转化成等价的对基本表的查询 例子: 在信息系的学生中找到年龄小于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视

9、图中, 查询平均成绩在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, 赵新

10、, 女, 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上已有

11、开发了多个应用, 为了达到不改变应用程序的目的, 可以建视图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或distinct视图; 嵌套查询内层的表也是导出该视图的基本表时,不允许更新; 不允许更新的视图上定义的视图也不允许更新。,嵌套查询内层的表也是导出该视图的基本表,例如:CREATE VIEW GOOD_SC AS SELECT Sno,Grade FROM SC WHERE Grade (SELECT AVG(Grade) FROM SC);,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号