资源预览内容
第1页 / 共58页
第2页 / 共58页
第3页 / 共58页
第4页 / 共58页
第5页 / 共58页
第6页 / 共58页
第7页 / 共58页
第8页 / 共58页
第9页 / 共58页
第10页 / 共58页
亲,该文档总共58页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
数据库原理第三章 关系数据库标准语言SQL (续2)第三章 关系数据库标准语言SQL3.1 SQL概述3.2 学生-课程数据库3.3 数据定义3.4 数据查询3.5 数据更新3.6 视图3.7 小结3.5 数 据 更 新 3.5.1 插入数据3.5.2 修改数据3.5.3 删除数据 3.5.1 插入数据v两种插入数据方式1. 插入元组2. 插入子查询结果可以一次插入多个元组 一、插入元组v语句格式INSERTINTO (,)VALUES ( , )v功能n将新元组插入指定表中插入元组(续)v INTO子句n属性列的顺序可与表定义中的顺序不一致n没有指定属性列n指定部分属性列v VALUES子句n 提供的值必须与INTO子句匹配 值的个数 值的类型插入元组(续)例1 将一个新学生元组(学号:200215128 ;姓名:陈冬;性别:男;所在系:IS;年龄 :18岁)插入到Student表中。INSERTINTO Student (Sno,Sname,Ssex,Sdept,Sage)VALUES (200215128,陈冬,男,IS,18);插入元组(续)例2 将学生张成民的信息插入到Student表中 。INSERTINTO StudentVALUES (200215126, 张成民, 男,18,CS); 插入元组(续)例3 插入一条选课记录( 200215128,1 )。INSERTINTO SC(Sno,Cno)VALUES ( 200215128 , 1 );RDBMS将在新插入记录的Grade列上自动地赋空值 。或者:INSERTINTO SCVALUES ( 200215128 , 1 ,NULL);二、插入子查询结果v语句格式INSERT INTO ( , )子查询;v功能将子查询结果插入指定表中插入子查询结果(续)v INTO子句(与插入元组类似)v 子查询nSELECT子句目标列必须与INTO子句匹配 值的个数 值的类型插入子查询结果(续)例4 对每一个系,求学生的平均年龄,并把结果 存入数据库。第一步:建表CREATE TABLE Dept_age(Sdept CHAR(15) /* 系名*/Avg_age SMALLINT); /*学生平均年龄*/插入子查询结果(续)第二步:插入数据INSERTINTO Dept_age(Sdept,Avg_age)SELECT Sdept,AVG(Sage)FROM StudentGROUP BY Sdept;插入子查询结果(续)RDBMS在执行插入语句时会检查所插元组是否破坏表上已定义的完整性规则 实体完整性 参照完整性 用户定义的完整性 NOT NULL约束UNIQUE约束值域约束3.5 数 据 更 新 3.5.1 插入数据3.5.2 修改数据3.5.3 删除数据 3.4.2 修改数据v语句格式UPDATE SET =,=WHERE ;v功能n修改指定表中满足WHERE子句条件的元组修改数据(续)nSET子句指定修改方式要修改的列修改后取值nWHERE子句指定要修改的元组缺省表示要修改表中的所有元组修改数据(续)v三种修改方式1. 修改某一个元组的值2. 修改多个元组的值3. 带子查询的修改语句1. 修改某一个元组的值例5 将学生200215121的年龄改为22岁UPDATE StudentSET Sage=22WHERE Sno= 200215121 ; 2. 修改多个元组的值例6 将所有学生的年龄增加1岁UPDATE StudentSET Sage= Sage+1;3. 带子查询的修改语句例7 将计算机科学系全体学生的成绩置零。UPDATE SCSET Grade=0WHERE CS=(SELETE SdeptFROM StudentWHERE Student.Sno = SC.Sno);修改数据(续)RDBMS在执行修改语句时会检查修改操作是否破坏表上已定义的完整性规则n实体完整性n主码不允许修改n用户定义的完整性 NOT NULL约束 UNIQUE约束 值域约束3.5 数 据 更 新 3.5.1 插入数据3.5.2 修改数据3.5.3 删除数据 3.5.3 删除数据v语句格式DELETEFROM WHERE ;v功能n删除指定表中满足WHERE子句条件的元组v WHERE子句n指定要删除的元组n缺省表示要删除表中的全部元组,表的定义仍在字典中删除数据(续)v三种删除方式1. 删除某一个元组的值2. 删除多个元组的值3. 带子查询的删除语句1. 删除某一个元组的值例8 删除学号为200215128的学生记录。DELETEFROM StudentWHERE Sno= 200215128 ;2. 删除多个元组的值例9 删除所有的学生选课记录。DELETEFROM SC;3. 带子查询的删除语句例10 删除计算机科学系所有学生的选课记录。DELETEFROM SCWHERE CS=(SELETE SdeptFROM StudentWHERE Student.Sno=SC.Sno);第三章 关系数据库标准语言SQL3.1 SQL概述3.2 学生-课程数据库3.3 数据定义3.4 数据查询3.5 数据更新3.6 视图3.7 小结3.6 视 图视图的特点v 虚表,是从一个或几个基本表(或视图)导出的表v 只存放视图的定义,不存放视图对应的数据v 基表中的数据发生变化,从视图中查询出的数据也随之改变3.6 视 图基于视图的操作v 查询v 删除v 受限更新v 定义基于该视图的新视图3.6 视 图3.6.1 定义视图3.6.2 查询视图3.6.3 更新视图3.6.4 视图的作用3.6.1 定义视图v建立视图v删除视图一、建立视图v语句格式CREATE VIEW ( ,)AS WITH CHECK OPTION;v组成视图的属性列名:全部省略或全部指定v子查询不允许含有ORDER BY子句和DISTINCT短语建立视图(续)vRDBMS执行CREATE VIEW语句时只是把视图定义存入数据字典,并不执行其中的SELECT语句。v在对视图查询时,按视图的定义从基本表中将数据查出。建立视图(续)例1 建立信息系学生的视图。CREATE VIEW IS_StudentAS SELECT Sno,Sname,SageFROM StudentWHERE Sdept= IS;建立视图(续)例2建立信息系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有信息系的学生 。CREATE VIEW IS_StudentAS SELECT Sno,Sname,SageFROM StudentWHERE Sdept= ISWITH CHECK OPTION;建立视图(续)对IS_Student视图的更新操作:v 修改操作:自动加上Sdept= IS的条件v 删除操作:自动加上Sdept= IS的条件v 插入操作:自动检查Sdept属性值是否为IS 如果不是,则拒绝该插入操作 如果没有提供Sdept属性值,则自动定义Sdept为IS建立视图(续)v基于多个基表的视图例3 建立信息系选修了1号课程的学生视图。CREATE VIEW IS_S1(Sno,Sname,Grade)AS SELECT Student.Sno,Sname,GradeFROM Student,SCWHERE Sdept= IS ANDStudent.Sno=SC.Sno ANDSC.Cno= 1;建立视图(续)v基于视图的视图例4 建立信息系选修了1号课程且成绩在90分以上的学生的视图。CREATE VIEW IS_S2ASSELECT Sno,Sname,GradeFROM IS_S1WHERE Grade=90;建立视图(续)v带表达式的视图例5 定义一个反映学生出生年份的视图。CREATE VIEW BT_S(Sno,Sname,Sbirth) AS SELECT Sno,Sname,2000-SageFROM Student;建立视图(续)v分组视图例6 将学生的学号及他的平均成绩定义为一个视 图假设SC表中“成绩”列Grade为数字型CREAT VIEW S_G(Sno,Gavg)AS SELECT Sno,AVG(Grade)FROM SCGROUP BY Sno;不指定属性列例7将Student表中所有女生记录定义为一个视图CREATE VIEW F_Student(F_Sno,name,sex,age,dept)ASSELECT *FROM StudentWHERE Ssex=女;缺点:修改基表Student的结构后,Student表与F_Student视图的 映象关系被破坏,导致该视图不能正确工作。43二、删除视图v语句的格式: DROP VIEW ; 该语句从数据字典中删除指定的视图定义 如果该视图上还导出了其他视图,使用CASCADE级联删除语句,把该视图和由它导出的所有视图一起删除 删除基表时,由该基表导出的所有视图定义都必须显 式地使用DROP VIEW语句删除 删除视图(续)例8 删除视图BT_S: DROP VIEW BT_S;删除视图IS_S1:DROP VIEW IS_S1;拒绝执行级联删除:DROP VIEW IS_S1 CASCADE; 3.6 视 图3.6.1 定义视图3.6.2 查询视图3.6.3 更新视图3.6.4 视图的作用3.6.2 查询视图v用户角度:查询视图与查询基本表相同vRDBMS实现视图查询的方法 视图消解法(View Resolution) 进行有效性检查 转换成等价的对基本表的查询 执行修正后的查询查询视图(续)例9 在信息系学生的视图中找出年龄小于20岁 的学生。SELECT Sno,SageFROM IS_StudentWHERE Sage20;IS_Student视图的定义 (参见视图定义例1)查询视图(续)例10 查询选修了1号课程的信息系学生SELECT IS_Student.Sno,SnameFROM IS_Student,SC WHERE IS_Student.Sno =SC.Sno AND SC.Cno= 1;3.6 视 图3.6.1 定义视图3.6.2 查询视图3.6.3 更新视图3.6.4 视图的作用更新视图(续)例12 将信息系学生视图IS_Student中学号200215122的学生姓名改为“刘辰”。UPDATE IS_StudentSET Sname= 刘辰WHERE Sno= 200215122 ;转换后的语句:UPDATE StudentSET Sname= 刘辰WHERE Sno= 200215122 AND Sdept= IS;更新视图(续)例13 向信息系学生视图IS_S中插入一个新的学生记录: 200215129,赵新,20岁 INSERT INTO IS_Student VALUES(95029,赵新,20); 转换为对基本表的更新: INSERT INTO Student(Sno,Sname,Sage,Sdept) VALUES(200215129 ,赵新,20,IS );更新视图(续)例14删除信息系学生
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号