《数据库系统概论第3-3章.ppt》由会员分享,可在线阅读,更多相关《数据库系统概论第3-3章.ppt(62页珍藏版)》请在三一办公上搜索。
1、An Introduction to Database System,数据库系统概论An Introduction to Database System第三章 关系数据库标准语言SQL(续2),An Introduction to Database System,第三章 关系数据库标准语言SQL,3.1 SQL概述3.2 学生-课程数据库3.3 数据定义3.4 数据查询3.5 数据更新3.6 视图3.7 小结,An Introduction to Database System,3.5 数 据 更 新,3.5.1 插入数据3.5.2 修改数据3.5.3 删除数据,An Introduction
2、 to Database System,3.5.1 插入数据,两种插入数据方式1.插入元组2.插入子查询结果可以一次插入多个元组,An Introduction to Database System,一、插入元组,语句格式INSERTINTO(,)VALUES(,)功能将新元组插入指定表中,An Introduction to Database System,插入元组(续),INTO子句属性列的顺序可与表定义中的顺序不一致没有指定属性列指定部分属性列 VALUES子句 提供的值必须与INTO子句匹配值的个数值的类型,An Introduction to Database System,插入元组
3、(续),例1 将一个新学生元组(学号:200215128;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中。INSERT INTO Student(Sno,Sname,Ssex,Sdept,Sage)VALUES(200215128,陈冬,男,IS,18);,An Introduction to Database System,插入元组(续),例2 将学生张成民的信息插入到Student表中。INSERT INTO Student VALUES(200215126,张成民,男,18,CS);,An Introduction to Database System,插入元
4、组(续),例3 插入一条选课记录(200215128,1)。INSERT INTO SC(Sno,Cno)VALUES(200215128,1);RDBMS将在新插入记录的Grade列上自动地赋空值。或者:INSERT INTO SC VALUES(200215128,1,NULL);,An Introduction to Database System,二、插入子查询结果,语句格式 INSERT INTO(,)子查询;功能 将子查询结果插入指定表中,An Introduction to Database System,插入子查询结果(续),INTO子句(与插入元组类似)子查询SELECT子句
5、目标列必须与INTO子句匹配值的个数值的类型,An Introduction to Database System,插入子查询结果(续),例4 对每一个系,求学生的平均年龄,并把结果存入数据库。第一步:建表 CREATE TABLE Dept_age(Sdept CHAR(15)/*系名*/Avg_age SMALLINT);/*学生平均年龄*/,An Introduction to Database System,插入子查询结果(续),第二步:插入数据 INSERT INTO Dept_age(Sdept,Avg_age)SELECT Sdept,AVG(Sage)FROM Student
6、GROUP BY Sdept;,An Introduction to Database System,插入子查询结果(续),RDBMS在执行插入语句时会检查所插元组是否破坏表上已定义的完整性规则实体完整性参照完整性用户定义的完整性NOT NULL约束UNIQUE约束值域约束,An Introduction to Database System,3.5 数 据 更 新,3.5.1 插入数据3.5.2 修改数据3.5.3 删除数据,An Introduction to Database System,3.4.2 修改数据,语句格式 UPDATE SET=,=WHERE;功能修改指定表中满足WHER
7、E子句条件的元组,An Introduction to Database System,修改数据(续),SET子句指定修改方式要修改的列修改后取值WHERE子句指定要修改的元组缺省表示要修改表中的所有元组,An Introduction to Database System,修改数据(续),三种修改方式1.修改某一个元组的值2.修改多个元组的值3.带子查询的修改语句,An Introduction to Database System,1.修改某一个元组的值,例5 将学生200215121的年龄改为22岁 UPDATE Student SET Sage=22 WHERE Sno=2002151
8、21;,An Introduction to Database System,2.修改多个元组的值,例6 将所有学生的年龄增加1岁 UPDATE Student SET Sage=Sage+1;,An Introduction to Database System,3.带子查询的修改语句,例7 将计算机科学系全体学生的成绩置零。UPDATE SC SET Grade=0 WHERE CS=(SELETE Sdept FROM Student WHERE Student.Sno=SC.Sno);,An Introduction to Database System,修改数据(续),RDBMS在执
9、行修改语句时会检查修改操作是否破坏表上已定义的完整性规则实体完整性主码不允许修改用户定义的完整性 NOT NULL约束 UNIQUE约束 值域约束,An Introduction to Database System,3.5 数 据 更 新,3.5.1 插入数据3.5.2 修改数据3.5.3 删除数据,An Introduction to Database System,3.5.3 删除数据,语句格式 DELETE FROM WHERE;功能删除指定表中满足WHERE子句条件的元组WHERE子句指定要删除的元组缺省表示要删除表中的全部元组,表的定义仍在字典中,An Introduction t
10、o Database System,删除数据(续),三种删除方式1.删除某一个元组的值2.删除多个元组的值3.带子查询的删除语句,An Introduction to Database System,1.删除某一个元组的值,例8 删除学号为200215128的学生记录。DELETE FROM Student WHERE Sno=200215128;,An Introduction to Database System,2.删除多个元组的值,例9 删除所有的学生选课记录。DELETE FROM SC;,An Introduction to Database System,3.带子查询的删除语句,
11、例10 删除计算机科学系所有学生的选课记录。DELETE FROM SC WHERE CS=(SELETE Sdept FROM Student WHERE Student.Sno=SC.Sno);,An Introduction to Database System,第三章 关系数据库标准语言SQL,3.1 SQL概述3.2 学生-课程数据库3.3 数据定义3.4 数据查询3.5 数据更新3.6 视图3.7 小结,An Introduction to Database System,3.6 视 图,视图的特点虚表,是从一个或几个基本表(或视图)导出的表只存放视图的定义,不存放视图对应的数据基
12、表中的数据发生变化,从视图中查询出的数据也随之改变,An Introduction to Database System,3.6 视 图,基于视图的操作 查询 删除 受限更新 定义基于该视图的新视图,An Introduction to Database System,3.6 视 图,3.6.1 定义视图3.6.2 查询视图3.6.3 更新视图3.6.4 视图的作用,An Introduction to Database System,3.6.1 定义视图,建立视图删除视图,An Introduction to Database System,一、建立视图,语句格式 CREATE VIEW(,
13、)AS WITH CHECK OPTION;组成视图的属性列名:全部省略或全部指定子查询不允许含有ORDER BY子句和DISTINCT短语,An Introduction to Database System,建立视图(续),RDBMS执行CREATE VIEW语句时只是把视图定义存入数据字典,并不执行其中的SELECT语句。在对视图查询时,按视图的定义从基本表中将数据查出。,An Introduction to Database System,建立视图(续),例1 建立信息系学生的视图。CREATE VIEW IS_Student AS SELECT Sno,Sname,Sage FROM
14、 Student WHERE Sdept=IS;,An Introduction to Database System,建立视图(续),例2建立信息系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有信息系的学生。CREATE VIEW IS_Student AS SELECT Sno,Sname,Sage FROM Student WHERE Sdept=IS WITH CHECK OPTION;,An Introduction to Database System,建立视图(续),对IS_Student视图的更新操作:修改操作:自动加上Sdept=IS的条件删除操作:自动加上Sdep
15、t=IS的条件插入操作:自动检查Sdept属性值是否为IS 如果不是,则拒绝该插入操作如果没有提供Sdept属性值,则自动定义Sdept为IS,An Introduction to Database System,建立视图(续),基于多个基表的视图例3 建立信息系选修了1号课程的学生视图。CREATE VIEW IS_S1(Sno,Sname,Grade)AS SELECT Student.Sno,Sname,Grade FROM Student,SC WHERE Sdept=IS AND Student.Sno=SC.Sno AND SC.Cno=1;,An Introduction to
16、Database System,建立视图(续),基于视图的视图例4 建立信息系选修了1号课程且成绩在90分以上的学生的视图。CREATE VIEW IS_S2 AS SELECT Sno,Sname,Grade FROM IS_S1 WHERE Grade=90;,An Introduction to Database System,建立视图(续),带表达式的视图例5 定义一个反映学生出生年份的视图。CREATE VIEW BT_S(Sno,Sname,Sbirth)AS SELECT Sno,Sname,2000-Sage FROM Student;,An Introduction to D
17、atabase System,建立视图(续),分组视图例6 将学生的学号及他的平均成绩定义为一个视图 假设SC表中“成绩”列Grade为数字型 CREAT VIEW S_G(Sno,Gavg)AS SELECT Sno,AVG(Grade)FROM SC GROUP BY Sno;,An Introduction to Database System,建立视图(续),不指定属性列例7将Student表中所有女生记录定义为一个视图 CREATE VIEW F_Student(F_Sno,name,sex,age,dept)AS SELECT*FROM Student WHERE Ssex=女;缺
18、点:修改基表Student的结构后,Student表与F_Student视图的映象关系被破坏,导致该视图不能正确工作。,An Introduction to Database System,二、删除视图,语句的格式:DROP VIEW;该语句从数据字典中删除指定的视图定义如果该视图上还导出了其他视图,使用CASCADE级联删除语句,把该视图和由它导出的所有视图一起删除 删除基表时,由该基表导出的所有视图定义都必须显式地使用DROP VIEW语句删除,An Introduction to Database System,删除视图(续),例8 删除视图BT_S:DROP VIEW BT_S;删除视
19、图IS_S1:DROP VIEW IS_S1;拒绝执行级联删除:DROP VIEW IS_S1 CASCADE;,An Introduction to Database System,3.6 视 图,3.6.1 定义视图3.6.2 查询视图3.6.3 更新视图3.6.4 视图的作用,An Introduction to Database System,3.6.2 查询视图,用户角度:查询视图与查询基本表相同RDBMS实现视图查询的方法视图消解法(View Resolution)进行有效性检查转换成等价的对基本表的查询执行修正后的查询,An Introduction to Database Sy
20、stem,查询视图(续),例9 在信息系学生的视图中找出年龄小于20岁的学生。SELECT Sno,Sage FROM IS_Student WHERE Sage20;IS_Student视图的定义(参见视图定义例1),An Introduction to Database System,查询视图(续),视图消解转换后的查询语句为:SELECT Sno,Sage FROM Student WHERE Sdept=IS AND Sage20;,An Introduction to Database System,查询视图(续),例10 查询选修了1号课程的信息系学生SELECT IS_Stude
21、nt.Sno,SnameFROM IS_Student,SCWHERE IS_Student.Sno=SC.Sno AND SC.Cno=1;,An Introduction to Database System,查询视图(续),视图消解法的局限有些情况下,视图消解法不能生成正确查询。,An Introduction to Database System,查询视图(续),例11在S_G视图中查询平均成绩在90分以上的学生学号和平均成绩SELECT*FROM S_GWHERE Gavg=90;S_G视图的子查询定义:CREATE VIEW S_G(Sno,Gavg)AS SELECT Sno,A
22、VG(Grade)FROM SCGROUP BY Sno;,An Introduction to Database System,查询转换,错误:SELECT Sno,AVG(Grade)FROM SCWHERE AVG(Grade)=90GROUP BY Sno;正确:SELECT Sno,AVG(Grade)FROM SCGROUP BY SnoHAVING AVG(Grade)=90;,An Introduction to Database System,3.6 视 图,3.6.1 定义视图3.6.2 查询视图3.6.3 更新视图3.6.4 视图的作用,An Introduction t
23、o Database System,更新视图(续),例12 将信息系学生视图IS_Student中学号200215122的学生姓名改为“刘辰”。UPDATE IS_StudentSET Sname=刘辰WHERE Sno=200215122;转换后的语句:UPDATE StudentSET Sname=刘辰WHERE Sno=200215122 AND Sdept=IS;,An Introduction to Database System,更新视图(续),例13 向信息系学生视图IS_S中插入一个新的学生记录:200215129,赵新,20岁INSERTINTO IS_StudentVALU
24、ES(95029,赵新,20);转换为对基本表的更新:INSERTINTO Student(Sno,Sname,Sage,Sdept)VALUES(200215129,赵新,20,IS);,An Introduction to Database System,更新视图(续),例14删除信息系学生视图IS_Student中学号为200215129的记录 DELETEFROM IS_StudentWHERE Sno=200215129;转换为对基本表的更新:DELETEFROM StudentWHERE Sno=200215129 AND Sdept=IS;,An Introduction to
25、Database System,更新视图(续),更新视图的限制:一些视图是不可更新的,因为对这些视图的更新不能唯一地有意义地转换成对相应基本表的更新例:视图S_G为不可更新视图。UPDATE S_GSET Gavg=90WHERE Sno=200215121;这个对视图的更新无法转换成对基本表SC的更新,An Introduction to Database System,更新视图(续),允许对行列子集视图进行更新对其他类型视图的更新不同系统有不同限制,An Introduction to Database System,3.6 视 图,3.6.1 定义视图3.6.2 查询视图3.6.3 更新视图3.6.4 视图的作用,An Introduction to Database System,3.6.4 视图的作用,1.视图能够简化用户的操作2.视图使用户能以多种角度看待同一数据 3.视图对重构数据库提供了一定程度的逻辑独立性 4.视图能够对机密数据提供安全保护5.适当的利用视图可以更清晰的表达查询,An Introduction to Database System,下课了。,休息一会儿。,追求,