DB课内实验与要求(总)-答案(2010)_第1页
DB课内实验与要求(总)-答案(2010)_第2页
DB课内实验与要求(总)-答案(2010)_第3页
DB课内实验与要求(总)-答案(2010)_第4页
DB课内实验与要求(总)-答案(2010)_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

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

文档简介

实验1、数据定义1.1 实验目的熟悉SQL的数据定义语言,能够熟练地使用SQL语句来创建和更改基本表,创建和取消索引。1.2 实验内容l 用SSMS创建数据库University_Misl 使用CREATE语句创建基本表。l 更改基本表的定义: 增加列,删除列,修改列的数据类型。l 创建表的升、降序索引。l 删除基本表的约束、基本表的索引或基本表。1.3 实验步骤(1) 用SSMS创建数据库University_Mis启动SQL Server SSMS和服务管理器,进入SSMS的控制台窗口,选择右键单击“数据库”,在弹出的菜单中选择“新建数据库”命令,创建名为University_Mis的数据库。(2) 在查询分析器中用SQL语句创建关系数据库基本表:学生表Students(Sno,Sname, Semail,Scredit,Sroom);教师表Teachers(Tno,Tname,Temail,Tsalary);课程表Courses(Cno,Cname,Ccredit);成绩表Reports(Sno,Tno,Cno, Score);其中:Sno、Tno、Cno分别是表Students、表Teachers、表Courses的主键,具有唯一性约束,Scredit具有约束“大于等于0”; Reports中的Sno,Tno,Cno是外键,它们共同组成Reports的主键。CREATE TABLE Students (Sno CHAR(8) NOT NULL UNIQUE, Sname CHAR(20) NOT NULL, Semail CHAR(50), Scredit FLOAT, Sroom CHAR(20), CONSTRAINT PK_Students PRIMARY KEY(Sno), CONSTRAINT CK_Students_Scredit CHECK(Scredit=0)*/或者可如下编写。因为PRIMARY KEY本来就有唯一性和非空性约束。/后面各题亦如此,不再重述CREATE TABLE Students (Sno CHAR(8) , Sname CHAR(20), Semail CHAR(50), Scredit FLOAT, Sroom CHAR(20), CONSTRAINT PK_Students PRIMARY KEY(Sno), CONSTRAINT CK_Students_Scredit CHECK(Scredit=0)*CREATE TABLE Teachers (Tno CHAR(8) NOT NULL UNIQUE, Tname CHAR(20) NOT NULL, Temail CHAR(50), Tsalary FLOAT, CONSTRAINT PK_Teachers PRIMARY KEY(Tno)CREATE TABLE Courses (Cno CHAR(8) NOT NULL UNIQUE, Cname CHAR(20), Ccredit FLOAT, CONSTRAINT PK_Courses PRIMARY KEY(Cno)CREATE TABLE Reports (Sno CHAR(8) NOT NULL, Tno CHAR(8) NOT NULL, Cno CHAR(8) NOT NULL, Score FLOAT, CONSTRAINT PK_Reports PRIMARY KEY(Sno,Tno,Cno), CONSTRAINT FK_Reports_Sno FOREIGN KEY(Sno) REFERENCES Students, CONSTRAINT FK_Reports_Tno FOREIGN KEY(Tno) REFERENCES Teachers, CONSTRAINT FK_Reports_Cno FOREIGN KEY(Cno) REFERENCES Courses)(3) 更改表Students:增加属性Ssex(类型是CHAR,长度为2),取消Scredit“大于等于0”约束。把表Courses中的属性Cname的数据类型改成长度为30。ALTER TABLE Students ADD Ssex CHAR(2)ALTER TABLE Students DROP CONSTRAINT CK_Students_ScreditALTER TABLE Courses ALTER COLUMN Cname CHAR(30)/*注:在取消约束的时候,应该写出约束的名称。这个名称可以由用户在创建表时定义。若用户在创建表时没有定义名称,则当定义约束时,数据库会为这个约束起一个名称(不同的时候创建名称可能不同)。要查看这个名称,可以通过在企业分析器中,查看设计表中的约束选项,可以看到这个约束的名称。本例中的约束名称在创建表时由用户自定义*/(4) 删除表Students的一个属性Sroom。ALTER TABLE Students DROP COLUMN Sroom(5) 删除表Reports。DROP TABLE Reports(6) 为Courses表创建按Cno降序排列的索引。CREATE INDEX XCNO ON Courses(Cno DESC)/*注:XCNO为创建的索引名称*/(7) 为Students表创建按Sno升序排列的索引。CREATE INDEX XSNO ON Students(Sno)(8) 创建表Students的按Sname升序排列的唯一性索引。CREATE UNIQUE INDEX XSNA ON Students(Sname ASC)(9) 删除Students表Sno的升序索引。DROP INDEX Students.XSNO实验2、SQL的数据查询2.1 实验目的熟悉SQL语句的数据查询语言,能够SQL语句对数据库进行单表查询、连接查询、嵌套查询、集合查询和统计查询。2.2 实验内容实验内容主要是对数据库进行查询操作,包括如下四类查询方式:(1) 单表查询l 查询的目标表达式为所有列、指定的列或指定的列的运算三种不同。l 使用DISTINCT保留字消除重复行。l 对查询结果排序和分组。l 集合分组使用集函数进行各项统计。(2) 连接查询l 笛卡儿连接和等值连接。l 自连接。l 外连接l 复合条件连接。l 多表连接。(3) 嵌套查询l 通过实验验证对子查询的两个限制条件。l 体会相关子查询和不相关子查询的不同。l 考察四类谓词的用法,包括:第一类,IN、NOT IN;第二类,带有比较运算符的子查询;第三类,SOME、ANY或ALL谓词的子查询,查询最大值和最小值;第四类,带有EXISTS谓词的子查询,实现“所有”等情况(如王宏的“所有”课程,“所有”女生选修的课程)(4) 集合运算l 使用保留字UNION进行集合或运算。l 采用逻辑运算符AND或OR来实现集合交和减运算。2.3 实验步骤以University_Mis数据库为例,该数据库中有四张如实验1,其中Score是每门课的考试成绩,Scredit是学生所有考试合格课程所获得的积分总数,Ccredit每门课程的学分数。在数据库中,存在这样的联系:学生可以选择课程,一个课程对应一个教师。在表Reports中保存学生的选课记录和考试成绩。请先根据查询需求输入若干符合条件的元组,再对数据库进行有关的查询操作。可输入数据表如下:图1.1、Students表 图1.2、Teachers表 图1.3、Courses表 图1.4、Reports表(1) 查询性别为“男”的所有学生的名称并按学号升序排列。SELECT SnameFROM StudentsWHERE Ssex=男ORDER BY Sno/*注:当属性列的数值类型是CHAR时,与指定的值比较,指定的值要加上单引号,如本例中的男就必须加上单引号*/(2) 查询学生的选课成绩合格的课程成绩,并把成绩换算为积分。积分的计算公式为:1+(考试成绩-60)*0.1*Ccredit。考试成绩=60 否则=0SELECT Sno, Tno, Reports.Cno, Score, Point of Score, CONVERT(FLOAT(1), (Score-60)*0.1*Ccredit+Ccredit)FROM Courses, ReportsWHERE Score=60 AND Reports.Cno=Courses.CnoUNIONSELECT Sno, Tno, Reports.Cno, Score, Point of Score, 0FROM Courses, ReportsWHERE Reports.Cno=Courses.Cno AND (Score =3)(10) 查询编号S26的学生所选的全部课程的课程名和成绩。SELECT Courses.Cname,Reports.ScoreFROM Courses,ReportsWHERE Reports.Sno=S26 AND Courses.Cno=Reports.Cno(11) 查询所有选了“数据库原理及其应用”课程的学生编号和姓名。SELECT Sno,SnameFROM StudentsWHERE Sno IN(SELECT Reports.SnoFROM Reports,CoursesWHERE Reports.Cno=Courses.Cno AND Courses.Cname=数据库原理及其应用)(12) 求出选择了同一个课程的学生对。SELECT X.Sno,Y.Sno,X.CnoFROM Reports X,Reports YWHERE X.Cno=Y.Cno AND X.SnoY.Sno/*注:这里的学生对指的是选择了相同的某门课程的两个学生,由于两个学生可能选择了多门相同的课程,因此查询结果会出现重复的学生对,为增加可读性,在每个学生对后显示其选修的课程。本例中使用条件X.SnoY.Sno以确保每个学生对中,不存在学生自己与自己组成的对。*/(13) 求出至少被两名学生选修的课程编号。SELECT DISTINCT X.CnoFROM Reports X,Reports YWHERE X.Cno=Y.Cno AND X.Sno=2(14) 查询选修了编号S26的学生所选的某个课程的学生编号。SELECT Y.SnoFROM Reports X,Reports YWHERE X.Cno=Y.Cno AND X.Sno=S26/*注:在本题中,如果要求是“查询选修了编号S26的学生所选的某个课程的其他学生编号”时,也就是不包含编号S26学生自身的情况时,在查询条件WHERE中,还需要加上条件X.SnoY.Sno*/或SELECT distinct SnoFROM Reports WHERE Cno = any( select cno from reports where sno=S26)and snoS26(15) 查询学生的基本信息及选修课程编号和成绩。SELECT Students.Sno,Students.Sname,Students.Semail,Students.Scredit,Students.Ssex,Reports.Cno,Reports.ScoreFROM Students JOIN Reports ON Students.Sno=Reports.Sno/*注:join相当于right join.在本题中,应用left join*/(16) 查询学号S52的学生的姓名和选修的课程名称及成绩。SELECT Students.Sname,Courses.Cname,Reports.ScoreFROM Students,Courses,ReportsWHERE Students.Sno=Reports.Sno AND Courses.Cno=Reports.Cno AND Students.Sno=S52(17) 查询和学号S52的学生同性别的所有学生资料。SELECT *FROM StudentsWHERE Ssex=( SELECT Ssex FROM Students WHERE Sno=S52 )(18) 查询所有选课的学生的详细信息。SELECT *FROM StudentsWHERE Sno IN(SELECT SnoFROM Reports)(19) 查询没有学生选的课程的编号和名称。SELECT Cno,CnameFROM CoursesWHERE Cno NOT IN(SELECT CnoFROM Reports)(20) 查询选修了课程名为C+的学生学号和姓名。SELECT Sno,SnameFROM StudentsWHERE Sno IN ( SELECT Sno FROM Reports WHERE Cno IN ( SELECT Cno FROM Courses WHERE Cname=C+ ) )或SELECT Students.Sno,SnameFROM Students,Reports,CoursesWHERE Students.Sno =Reports.Sno and Reports.Cno= Courses.Cno and Cname=C+(21) 找出选修课程UML或者课程C+的学生学号和姓名。SELECT Sno,SnameFROM StudentsWHERE Sno IN ( SELECT Sno FROM Reports WHERE Cno IN ( SELECT Cno FROM Courses WHERE Cname=C+ OR Cname=UML ) )(22) 找出和课程UML或课程C+的学分一样课程名称。SELECT CnameFROM CoursesWHERE Ccredit=SOME(SELECT CcreditFROM CoursesWHERE Cname=UML OR Cname=C+)/*注:在本题中,将=SOME换成=ANY或IN都可行。*/(23) 查询所有选修编号C01的课程的学生的姓名。SELECT SnameFROM StudentsWHERE EXISTS(SELECT *FROM ReportsWHERE Reports.Cno=C01 AND Reports.Sno=Students.Sno)(24) 查询选修了所有课程的学生姓名。SELECT SnameFROM StudentsWHERE NOT EXISTS ( SELECT * FROM Courses X WHERE NOT EXISTS ( SELECT * FROM Reports Y WHERE Y.Sno=Students.Sno AND Y.Cno=X.Cno ) )/*注:在本题中,将问题分成三个查询来实现:1、最里层的子查询表示存在课程X,学生S没有选修,即在选课记录表Reports中,没有学生S选修课程X的记录。2、第二层子查询表示不存在最里层子查询所表示的这种反例,即在选课记录表Reports中不存在学生S没有选的课程。3、最外层查询是在表Students中取出符合条件的学生姓名*/(25) 利用集合查询方式,查询选修课程C+或选择课程JAVA的学生的编号、姓名和学分。SELECT Sno,Sname,ScreditFROM StudentsWHERE Sno IN ( SELECT Sno FROM Reports WHERE Reports.Cno= ( SELECT Courses.Cno FROM Courses WHERE Courses.Cname=C+ ) )UNIONSELECT Sno,Sname,ScreditFROM StudentsWHERE Sno IN ( SELECT Sno FROM Reports WHERE Reports.Cno= ( SELECT Courses.Cno FROM Courses WHERE Courses.Cname=JAVA ) )(26) 实现集合交运算,查询既选修课程C+又选修课程JAVA的学生的编号、姓名和积分。SELECT Sno,Sname,ScreditFROM StudentsWHERE Sno IN ( SELECT X.Sno FROM Reports X,Reports Y WHERE(X.Cno=( SELECT Cno FROM Courses WHERE Cname=C+ )AND Y.Cno=( SELECT Cno FROM Courses WHERE Cname=JAVA ) )AND X.Sno=Y.Sno )(27) 实现集合减运算,查询选修课程C+而没有选修课程JAVA的学生的编号。基本的语句模式如下:SELECT Sno FROM ReportsWHERE Cno=C01AND Sno NOT IN(SELECT SnoFROM Reports WHERE Cno=C03)本题具体的SQL语句SELECT * FROM StudentsWHERE Sno IN ( SELECT Sno FROM Reports WHERE Cno=(SELECT Cno FROM Courses WHERE Cname=C+) AND Sno NOT IN (SELECT Sno FROM Reports WHERE Cno=(SELECT Cno FROM Courses WHERE Cname=JAVA) 实验3、数据更新3.1 实验目的熟悉数据库的数据更新操作,能够使用SQL语句对数据库进行数据的插入、更新、删除操作。3.2 实验内容l 在本实验中,主要内容是如何用SQL语句对数据进行更新。l 使用INSERT INTO语句插入数据,包括插入一个元组或将子查询的结果插入到数据库中两种方式。l 使用SELECT INTO语句,产生一个新表并插入数据。l 使用UPDATE语句可以修改指定表中满足WHERE子句条件的元组,有三种修改的方式:修改某一个元组的值;修改多个元组的值;带子查询地修改语句。l 使用DELETE语句删除数据:删除某一个元组的值;删除多个元组的值;带子查询地删除语句。3.3 实验步骤在数据库University_Mis上按下列要求进行数据更新。(1) 使用SQL语句向Students表中插入元组(Sno:S78; Sname:李迪; Semail:LD; Scredit:0;Ssex:男)。INSERTINTO StudentsVALUES(S78,李迪,LD,0,男)(2) 对每个课程,求学生的选课人数和学生的平均成绩,并把结果存入数据库。使用SELECT INTO 和INSERT INTO 两种方法实现。1、要把结果村如存入数据库,在数据库中并不存在这样的表,若使用INSERT INTO语句,可以通过先建表,再插入数据CREATE TABLE ReportsResult(Cno CHAR(10),Students SMALLINT,Avgscore FLOAT)INSERT INTO ReportsResultSELECT Cno,COUNT(Sno),AVG(Score)FROM ReportsGROUP BY Cno2、SELECT INTO语句可以同时建立新表并插入数据SELECT Cno AS Cno,COUNT(Sno) AS Students,AVG(Score) AS AvgscoreINTO ReportsResultFROM ReportsGROUP BY Cno(3) 在Students表中使用SQL语句将姓名为李迪的学生的学号改为S70。UPDATE StudentsSET Sno=S70WHERE Sname=李迪(4) 在Teachers表中使用SQL语句将所有教师的工资加500元。UPDATE TeachersSET Tsalary = Tsalary+500(5) 将姓名为刘华的学生的课程“数据库原理及其应用”的成绩加上6分。UPDATE ReportsSET Score=Score+6WHERE Reports.Sno=( SELECT Sno FROM Students WHERE Sname=刘华)AND Reports.Cno=( SELECT Cno FROM Courses WHERE Cname=数据库原理及其应用 ) (6) 在Students表中使用SQL语句删除姓名为李迪的学生信息。DELETE StudentsWHERE Sname=李迪(7) 删除所有选修课程JAVA的选修课记录。DELETEFROM ReportsWHERE JAVA=( SELECT Cname FROM Courses WHERE Courses.Cno=Reports.Cno )(8) 对Courses表做删去学分=4的元组操作,讨论该操作所受到的约束。DELETE CoursesWHERE Ccredit=60(2) 创建基于多个基本表的视图SCT_View,这个视图由学生姓名和他所选修的课程名及讲授该课程的教师姓名构成。CREATE VIEW SCT_View(Sname,Cname,Tname)AS SELECT Students.Sname,Courses.Cname,Teachers.TnameFROM Reports,Students,Courses,TeachersWHERE Reports.Tno=Teachers.Tno AND Reports.Cno=Courses.Cno AND Reports.Sno=Students.Sno(3) 创建带表达式的视图EXP_View,由学生姓名及所选课程名和所有课程成绩都比原来多5分这几个属性组成。CREATE VIEW EXP_View(Sname,Cname,Score)AS SELECT Students.Sname,Courses.Cname,Reports.Score+5FROM Reports,Students,CoursesWHERE Reports.Cno=Courses.Cno AND Reports.Sno=Students.Sno(4) 创建分组视图Group_View,将学生的学号及他的平均成绩定义为一个视图。CREATE VIEW Group_View(Sno,Savg)AS SELECT Sno,AVG(Score)FROM ReportsGROUP BY Sno(5) 创建一个基于视图的视图,基于(1)中建立的视图,定义一个包括学生编号、学生所选课程数目和平均成绩的视图VV_View。CREATE VIEW VV_View(Sno,Ccount,Savg)AS SELECT Sno,Count(CS_View.Cno),AVG(Score)FROM CS_ViewGROUP BY CS_View.Sno(6) 查询所有选修课程“数据库原理及其应用”的学生姓名。SELECT SnameFROM SCT_ViewWHERE Cname=数据库原理及其应用(7) 插入元组(S52,T02,C02,59)到视图CS_View中。若是在视图的定义中存在WITH CHECK OPTION字句对插入操作由什么影响。1、插入元组:INSERT INTO CS_ViewVALUES(S52,T02,C02,59) 2、创建视图CS_View时,加上了WITH CHECK OPTION子句:CREATE VIEW CS_ViewAS SELECT Sno,Tno,Cno,ScoreFROM ReportsWHERE Score=60WITH CHECK OPTION插入元组:INSERT INTO CS_ViewVALUES(S52,T02,C02,59)执行结果:服务器: 消息 550,级别 16,状态 1,行 1试图进行的插入或更新已失败,原因是目标视图或者目标视图所跨越的某一视图指定了 WITH CHECK OPTION,而该操作的一个或多个结果行又不符合 CHECK OPTION 约束的条件。语句已终止。 结果讨论: 从错误提示信息可以看出,WITH CHECK OPTION子句使得所有的对视图的插入或更新操作都必须满足定义视图时指明的条件,在本题中是Score=60。(8) 将视图CS_View(包括定义WITH CHECK OPTION)中,所有课程编号为C01的课程的成绩都减去5分。这个操作数据库是否会正确执行,为什么?如果加上5分(原来95分以上的不变)呢?1、所有课程编号为C01的课程的成绩都减去5分:UPDATE CS_ViewSET Score=Score-5WHERE Cno=C01执行结果:服务器: 消息 550,级别 16,状态 1,行 1试图进行的插入或更新已失败,原因是目标视图或者目标视图所跨越的某一视图指定了 WITH CHECK OPTION,而该操作的一个或多个结果行又不符合 CHECK OPTION 约束的条件。语句已终止。结果讨论:这是由于数据库中存在一些元组的Score值较低,当做运算Score=Score-5的时候,结果会60,这就不满足子句WITH CHECK OPTION的条件,因此操作不能实现。2、所有课程编号为C01的课程的成绩都加上5分(原来95分以上的不变):UPDATE CS_ViewSET Score=Score+5WHERE Cno=C01AND Score=60这个条件是否满足。如果不满足,数据就不会被删除。本题中,删除编号S03学生的记录,由于条件满足,删除操作顺利进行。(10) 取消视图SCT_View和视图CS_ViewDROP VIEW SCT_ViewDROP VIEW CS_View实验5、数据控制5.1 实验目的熟悉SQL的数据控制功能,能够使用SQL语句来向用户授予和收回权限。5.2 实验内容(1) 使用GRANT语句来对用户授权,对单个用户或多个用户授权,或使用保留字PUBLIC对所有用户授权。对不同的操作对象包括数据库、视图、基本表等进行不同权限的授权。(2) 使用WITH GRANT OPTION字句授予用户传播该权限的权利。(3) 当在授权时发生循环授权,考察DBS能否发现这个错误。如果不能,结合取消权限操作,查看DBS对循环授权的控制。(4) 使用REVOKE子句收回授权,取消授权的级联反应。5.3 实验步骤用SSMS在数据库University_Mis中建立三个用户USER1、USER2和USER3,他们在数据库中的角色是PUBLIC。请按以下要求,分别以管理员身份或这三个用户的身份登陆到数据库中,进行操作,并记录操作结果。(1) 授予所有用户对表Courses的查询权限。以USER1的身份登陆查询分析器,用SQL语言查询Courses和Students表,查询结果如何?1、授予所有用户对表Courses的查询权限:GRANT SELECTON CoursesTO PUBLIC2、以USER1的身份登陆查询分析器,用如下SQL语句查询Courses表:SELECT *FROM Courses执行结果如图1.5:图1.5、查询结果以USER1的身份登陆查询分析器,用如下SQL语句查询Students表:SELECT *FROM Students执行结果:服务器: 消息 229,级别 14,状态 5,行 1拒绝了对对象 Students(数据库 University_Mis,所有者 dbo)的 SELECT 权限。(2) 授予用户USER1对表Students插入和更新的权限,但不授予删除权限,并且授予用户USER1传播这两个权限的权利。以USER1的身份登陆到SSMS,用SQL语言插入和更新Students表,结果如何?(注意更新操作的授权)GRANT INSERT,UPDATEON StudentsTO USER1WITH GRANT OPTION(3) 允许用户USER2在表Reports中插入元组,更新Score列,可以查询除了Sno以外的所有列。以USER2的身份登陆到SSMS,用SQL语言插入更新并查询reports表,结果如何?(注意更新操作的授权)GRANT INSERT, UPDATE(Score), SELECT(Tno, Cno, Score)ON ReportsTO USER2(4) 用户USER1授予用户USER2对表Students插入和更新的权限,并且授予用户USER2传播插入和更新操作的权利。分别以USER1和user2的的身份登陆到SSMS,用SQL语言验证以上授权操作,结果如何?以用户名USER1登录数据库,使用GRANT语句授权给用户USER2:GRANT INSERT,UPDATEON StudentsTO USER2WITH GRANT OPTION(5) 收回对用户USER1对表Courses查询权限的授权。分别以USER1和USER2的身份登陆到SSMS,用SQL语言查询Courses表,查询结果如何?REVOKE SELECTON CoursesFROM USER1(6) 由上面(2)和(4)的授权,再由用户USER2对用户USER3授予表Students插入和更新的权限,并且授予用户USER3传播插入操作的权力。这时候,如果由USER3对USER1授予表Students的插入和更新权限是否能得到成功?如果能够成功,那么如果有用户USER2取消USER3的权限,对USER1会有什么影响?如果再由DBA取消USER1的权限,对USER2有什么影响?1、以用户USER2的身份登录到数据库,使用GRANT语句授权给用户USER3:GRANT INSERT,UPDATEON StudentsTO USER3WITH GRANT OPTION以用户名USER3登录数据库,使用GRANT语句授权给用户USER1:GRANT INSERT,UPDATEON StudentsTO USER1执行结果:命令已成功完成。结果讨论:USER3的权利是USER2授予的,USER2的权利是USER1授予的。由USER3再授予给USER1,这是一个逻辑上的矛盾。执行成功表明编译器无法检查出这种逻辑上的矛盾。 2、以用户USER2的身份登录到数据库,使用REVOKE语句取消用户USER3的权限:REVOKE INSERT,UPDATEON StudentsFROM USER3执行结果:服务器: 消息 4611,级别 16,状态 1,行 1若要废除可授予的特权,请在 REVOKE 语句中指定 CASCADE 选项。加上CASCADE 选项:REVOKE INSERT,UPDATEON StudentsFROM USER3CASCADE执行结果:命令已成功完成。结果讨论:此时通过SSMS直接查看用户的权限或者利用USER1身份登录到数据库中,对数据表Students做更新操作。可以发现USER3的权限已经没有了,而USER1的权限仍然存在。这表示在这里没有实现级联的删除方式。3、由DBA取消USER1的权限:REVOKE INSERT,UPDATEON StudentsFROM USER1CASCADE结果讨论:此时再查看用户的权限,发现USER1和USER2的权限都取消,实现了删除的级联操作。实验6、SQL的空值和空集处理6.1 实验目的认识NULL值在数据库中的特殊含义,了解空值和空集对于数据库的数据查询操作,特别是空值在条件表达式中与其他的算术运算符或者逻辑运算符的运算中,空集作为嵌套查询的子查询的返回结果时候的特殊性,能够熟练使用SQL语句来进行与空值,空集相关的操作。6.2 实验内容通过实验验证在原理解析中分析过的SQL Server对NULL的处理,包括:l 在查询的目标表达式中包含空值的运算。l 在查询条件中空值与比较运算符的运算结果。l 使用IS NULL或IS NOT NULL 来判断元组该列是否为空值。l 对存在取空值的列按值进行ORDER BY排序。l 使用保留字DISTINCT对空值的处理,区分数据库的多中取值与现实中的多种取值的不同。l 使用 GROUP BY对存在取空值的属性值进行分组。l 结合分组考察空值对各个集合函数的影响,特别注意对COUNT(*)和COUNT(列名)的不同影响。l 考察结果集是空集时,各个集函数的处理情况。l 验证嵌套查询中返回空集的情况下与各个谓词的运算结果。l 进行与空值有关的等值连接运算。6.3 实验步骤(1) 查询所有选课记录的成绩并将它换算为五分制(满分为5分,合格为3分),注意,创建表时允许Score取NULL值。SELECT Score,Score/20FROM Reports 执行结果如图1.6:图1.6、查询结果结果讨论:由执行结果可以看到当Score值是NULL时,对它做算术运算,结果仍然是NULL。(2) 通过查询选修编号C07的课程的学生的人数,其中成绩合格的学生人数,不合格的人数,讨论NULL值的特殊含义。1、查询选修编号C07的课程的学生的人数SELECT COUNT(*)FROM ReportsWHERE Cno=C07运行后得到结果为32、查询选修编号C07的课程,并且成绩合格的学生的人数SELECT COUNT(*)FROM ReportsWHERE Cno=C07 AND Score=60运行后得到结果为13、查询选修编号

温馨提示

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

评论

0/150

提交评论