广东工业大学实验报告
______________学院________________专业_____班 成绩评定_______ 学号__________姓名__________(合作者____号____) 教师签名_______
预习情况 操作情况 考勤情况 数据处理情况 实验 二 题目 数据库的定义实验 第___周星期___第___节 一、 实验目的与要求
要求熟练掌握和使用SQL、SQL Server企业管理器创建数据库、表、索引和修改表结构,并学会使用SQL Server查询分析器接受SQL语句和进行结果分析。
二、 实验方案
1、 在企业管理器中创建及打开数据库,在“新建数据库”时指明数据文件及事务日志的位置; 2、 在SQL Server企业管理器中用SQL语句实现以下各表:
学生(学号,姓名,性别,出生日期,所属学院); 课程(课程号,课程名,先行课号); 选课(学号,课程号,成绩);
3、建立库、表和表间的联系,选择合适的数据类型,定义必要的列级约束(包括性别约束和成绩约束)和表级约束。创建数据库中的表后,在查询分析器的对象浏览器中可见该表及其所拥有的约束:学生:2课程:1选课:4
三、 实验结果和数据处理 查询结果:
四 结论
理论要点:
1、 同一个数据库中,不允许有重名的基本表,表的命名格式必须遵从标示符的命名规则; 2、 同一个基本表中不允许出现重复的列名,其命名格式必须遵从标示符的命名规则; 3、 需要为表中的每一个属性设置一个数据类型;
4、 一个基本表中只能定义一个主码约束,被定义为主码的列的值不能为空;
五 问题与讨论
1、 举例说明创建外键的SQL语句中的参照表和被参照表各指什么?ON DELETE CASCADE
关键字对删除记录有何影响?
答:例如,创建选课表的语句中CREATE TABLE SC
( SNO char(5) foreign key(SNO) references STU (SNO) , Cno char(5) foreign key(cno) references CLASS (cno),
score decimal(4,1) check(score>=0 and score<=100), constraint sc_prim primary key (SNO,cno)
)被参照表示指学生表和课程表,参照表指的是选课表;ON DELETE CASCADE关键字
2、 在实验中遇到的问题:无法创建外码约束。
问题所在:在写创建外键的SQL语句时,忘了写外键的被参照表表名; 解决方法:写上外键的被参照表表名。
广东工业大学实验报告
______________学院________________专业_____班 成绩评定_______ 学号__________姓名__________(合作者____号____) 教师签名_______
预习情况 操作情况 考勤情况 数据处理情况 实验 三 题目 数据库的建立和维护实验 第___周星期___第___节 一、 实验目的与要求
要求熟练掌握和使用SQL、SQL Server企业管理器向数据库输入数据、修改数据和删除数据操作。
二、 实验方案
通过SQL Server企业管理器实现对学生成绩管理数据库的数据增加、数据删除和数据修改操作。要求每个表的记录在10行以上,可根据查询要求增加或完善表中记录;输入数据检验各数据约束的限制;数据更改和数据删除时检验外码约束;
三、 实验结果和数据处理 CLASS 表
SRUDENT
SC表
结论
表
四、
理论要点:1、数据的输入必须符合主键约束,切主键的值不能为空,不能重复; 2、主键的值不能修改,删除记录必须遵从参照完整性约束; 3、更新的数据必须符合属性所设置的数据类型;
五、 问题与讨论
1、 举例说明如何在输入数据时检验各数据约束的限制?
答:例如,在选课表中输入的学号和课程号重复时就违法主码唯一性的约束限制;在主码中不输入数据时就违反了主码的值不能为空的约束限制。
2、 举例说明如何在数据更改和数据删除时检验外码约束?举例说明创建外键时有无ON DELETE
CASCADE 关键字对删除记录有何影响?
答:例如在更改选课表中主码的值时,就会违反外码约束;删除学生表中的学号和课程表中的课程号也会违反外码约束;
3、 遇到的问题:在输入性别时无法输入男或女。
解决方法:将学生表中的属性,性别的数据类型更改为2个字符
广东工业大学实验报告
______________学院________________专业_____班 成绩评定_______ 学号__________姓名__________(合作者____号____) 教师签名_______
预习情况 操作情况 考勤情况 数据处理情况 实验 四 题目数据库的简单查询和连接查询实验 第___周星期___第___节 一、 实验目的与要求
要求熟练掌握和使用SQL、SQL Server企业管理器向数据库输入数据、修改数据和删除数据操作。
二、 实验方案
1. 2. 3. 4. 5. 6. 7.
通过SQL Server查询分析器实现对学生成绩管理数据库的以下简单查询和连接查询: 求数学系学生的学号和姓名; 求选修了课程的学生学号;
求选修课程C1的学生学号和成绩,并要求对查询结果按成绩降序排列,如果成绩相同则按学号升序排列;
求选修课程C1且成绩在80~90分之间的学生学号和成绩,并将成绩乘以系数0.8输出; 求数学系或计算机系姓张的学生的信息; 求缺少了成绩的学生的学号和课程号; 查询每门课程的先行课程名;
三、 实验结果和数据处理 查询语句
1
SELECT * FROM STUDENT WHERE SACADEMY='数学系' 2
SELECT * FROM CALLSS WHERE LESSONNO IS NOT NULL 3
SELECT SNO,POINT FROM CLASS WHERE LESSONNO IS C2 ORDER BY 4 5
SELECT * FROM STUDENT WHERE SACADEMY= '数学系' AND SNAME LIKE '张%' 6
SELECT SNO,LESSONNO FROM CLASS WHERE POINT IS NULL 7
SELECT LESSONNAME,FIRSTLESSONNUMBER FROM LESSON WHERE FIRSTLESSONNUMBER IS NOT NULL
查询结果1
2 5
6
7计算机
(给出各SQL语句及对应查询结果)
四、 结论
理论要点:1、* 符号是字段组的省略写法,表示表中的全部字段,查询结果按关系模式中的属性顺序排列。
2、where子句为检索条件,从from子句指定的基本表中选取满足条件元祖,再按
照select子句指定的列,投影到结果表。
3、连接查询不但可以在两个表中进行,同一个表中也可以与自己进行连接。
五、 问题与讨论
1、如何提高数据查询和连接速度? 答:在查询时不要过多地使用通配符*,尽量使用数字型字段,能用distinct的就不用group by,能用between的就不要用in。
2、遇到的问题:在进行自连接查询时,忘记给表取别名,无法进行自连接。 解决问题的方法:给表取别名。
广东工业大学实验报告
______________学院________________专业_____班 成绩评定_______ 学号__________姓名__________(合作者____号____) 教师签名_______
预习情况 操作情况 考勤情况 数据处理情况 实验 五 题目数据库的嵌套查询实验 第___周星期___第___节 一、 实验目的与要求
进一步掌握SQL Server查询分析器的使用方法,加深SQL语言的嵌套查询语句的理解。
二、 实验方案
通过SQL Server查询分析器实现对数据库的以下嵌套查询,并尝试用多种形式表示实验中的查询语句,并进行比较。
1、求选修了高等数学的学生学号和姓名;
2、求C1课程的成绩高于张三的C1课程成绩的学生学号和成绩; 3、求选修C2课程的学生姓名; 4、求没有选修C2课程的学生姓名;
5、求选修C1课程而没有选修C2课程的学生姓名;
三、 实验结果和数据处理
查询语句
1
SELECT STUDENT.SNO,SNAME FROM CLASS,STUDENT,LESSON WHERE (STUDENT.SNO=CLASS.SNO) AND (LESSON.LESSONNO=CLASS.LESSONNO) AND (LESSONNAME='高等数学') 2
3 4 5
SELECT POINT,STUDENT.SNO FROM CLASS,STUDENT WHERE (STUDENT.SNO=CLASS.SNO) AND (LESSONNO='C1') AND point>26 SELECT SNAME FROM CLASS,STUDENT (STUDENT.SNO=CLASS.SNO) AND (LESSONNO='C2') SELECT SNAME FROM CLASS,STUDENT (STUDENT.SNO=CLASS.SNO) AND (LESSONNO!='C2') SELECT SNAME FROM WHERE
WHERE
CLASS,STUDENT WHERE (STUDENT.SNO=CLASS.SNO) AND AND(LESSONNO!='C2')
查询结果1
(给出各SQL语句及对应查询结果)
2
3
4
(LESSONNO='C1')
5
四、 结论
理论要点:1、嵌套查询一般的求解方法是由里向外,即先执行子查询,后执行父查询,子查
询结果用于建立父查询的查找条件。
2、当子查询结果返回值为单值时,可用比较运算符连接父查询和子查询 3、当子查询为多值时,应用in来连接父查询和子查询。
五、 问题与讨论
1、 嵌套查询和连接查询有何区别?在本实验的查询任务中,哪些是可以由嵌套查询和连接查
询实现?
答:嵌套查询和连接查询的区别在于:嵌套查询是用于查询一个表的,而多表查询是用于查询多个表或一个表的;在本实验中,由于可以使用嵌套查询的都可以用连接查询来实现,所以1~5的查询任务都可以由嵌套查询和连接查询来实现。
2、 遇到的问题:进行任务4的时候,把选修了C12的学生也选了出来。
解决方法:把不等号改成not in
广东工业大学实验报告
______________学院________________专业_____班 成绩评定_______ 学号__________姓名__________(合作者____号____) 教师签名_______
预习情况 操作情况 考勤情况 数据处理情况 实验 六 数据库统计查询实验 第___周星期___第___节 一、 实验目的与要求
熟悉掌握SQL Server查询分析器的使用方法,加深对SQL语言查询语句的理解,熟悉掌握数据查询中的分组和统计的操作方法。
二、 实验方案
1. 2. 3. 4. 5.
通过SQL Server查询分析器实现以下对数据库的统计查询; 用SQL语句实现学生人数的统计;
用SQL语句实现计算机系学生人数的统计; 用SQL语句实现各系学生人数的统计; 用SQL语句统计选修某课程学生的人数; 用SQL语句统计选修了课程的学生的人数;
6. 用SQL语句统计被选课程及选修该课程的人数; 7. 用SQL语句统计每个学生全部课程的平均成绩; 8. 用SQL语句统计选修课超过3门课的学生学号;(可选)
三、实验结果和数据处理 查询语句:
1
SELECT COUNT (DISTINCT SNAME) FROM STUDENT 2
SELECT COUNT (DISTINCT SNAME) FROM STUDENT where SACADEMY= '计算机' 3
SELECT SACADEMY ,COUNT (SNO) FROM STUDENT GROUP BY SACADEMY 4
SELECT SNO ,COUNT (SNO) FROM CLASS WHERE LESSONNO='C1'GROUP BY SNO 5
SELECT SNO ,COUNT (SNO) FROM CLASS WHERE LESSONNO IS NOT NULL GROUP BY SNO 6
SELECT LESSONNO ,COUNT (LESSONNO) FROM CLASS GROUP BY LESSONNO 7
SELECT LESSONNO ,AVG(DISTINCT POINT) AS PINGJUNFEN FROM CLASS GROUP BY LESSONNO
查询结果:
1
2
3
4
5
6
7
四、结论
理论要点:1、聚集函数一般与分组操作一起使用。对查询结果分组的目的是为了细化聚集函数
的作用对象,分组后聚集函数将作用每一个组,是每一个组都有一个函数值。
2、group by 子句是将查询结果按某一列或多列的值分组,值相等的为一组,一个分
组在的结果集中以一个元组的形式出现。
3、having 子句用于筛选分组的最终输出结果,只有满足having子句指定的条件的
组才输出。
五、问题与讨论
1、试用GROUP BY(分组条件)字句后,语句中的统计函数的运行结果有什么不同? 答:用了group by 子句后,列值相等都集中以一个元组的形式出现。 2、遇到的问题:进行任务四时,如何进行进行多表的分组查询。 解决的方法:连接查询。
广东工业大学实验报告
______________学院________________专业_____班 成绩评定_______ 学号__________姓名__________(合作者____号____) 教师签名_______
预习情况 操作情况 考勤情况 数据处理情况 实验七题目 数据库的视图和图标的定义及使用实验 第___周星期__第_节 一、 实验目的与要求
掌握SQL Server中视图的创建和使用,加深对视图和SQL Server图表作用的理解。
二、 实验方案
通过SQL Server实现数据库的视图的创建及使用,完成以下任务: 1、建立计算机系学生的视图;
2、由学生、课程和选课三个表,定义一个计算机系的学生成绩视图,其属性包括学号、姓名、课程名和成绩;
3、将学生的学号、总成绩、平均成绩定义成一个视图;
4、统计学生的学号、姓名、总成绩及平均成绩(可利用3的视图或group by 学生.学号,学生.姓名);
三、实验结果和数据处理
1create view sub_a as select Sno,Sname,Sex,Sbirthday,Sdept from STU where Sdept='计算机系'
2create view sub_b as select STU.Sno,Sname,Cname,score from STU,CLASS,SC where (STU.Sno=SC.Sno and SC.Cno=CLASS.Cno) and STU.Sdept='计算机系'
3 create view sub_c as select Sno,avg(score) as avgscore,sum(score) as sumscore from SC group by Sno
4 select STU.Sno,Sname,avgscore,sumscore from STU,sub_c where
STU.Sno=sub_c.Sno
查询结果
1.
2.
3.
4.
四、结论
理论要点:1、组成视图的列名要么全部满足,要么全部指定。
2、多表连接导出的视图中有几个同名列作为视图的属性列名时,必须指定所有列
名。
3、视图是虚表,可以进行查询、删除、更新等操作。
五、问题与讨论
1、 为什么要建立视图?视图和基本表有什么不同?
答:建立视图,可以起到保密作用,可以加快连接速度。视图是从一个或多个基本表(或视
图)导出的虚表。
2group by语句在使用时需要注意什么事项?
1、使用GROUP BY 子句时,SELECT 列表中的非汇总列必须为GROUP BY 列表中的项。
2、分组时,所有的NULL值分为一组。
3、GROUP BY 列表中一般不允许出现复杂的表达试、显示标题以及SELECT列表中的位置标号。