数据库原理实验报告.docx
- 文档编号:22892334
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:18
- 大小:256.89KB
数据库原理实验报告.docx
《数据库原理实验报告.docx》由会员分享,可在线阅读,更多相关《数据库原理实验报告.docx(18页珍藏版)》请在冰豆网上搜索。
数据库原理实验报告
《数据库原理》
实
验
报
告
学号:
姓名:
班级:
指导教师:
中国矿业大学计算机科学与技术学院
2011年4月
数据库原理教师成绩评定表
评定成绩的依据:
①基础理论及基本技能的掌握
②独立解决实际问题的能力;
③研究内容的理论依据和技术方法;
④取得的主要成果
⑤工作态度及工作量;
⑥成绩采用优良中差四个等级
评定成绩表
实验序号
实验成绩
指导教师
日期
实验一
实验二
实验一:
SQL数据定义功能
一、实验内容及要求
1.使用SQL语句建立学生管理系统相关的表,同时完善各表的相关完整性约束。
其中带有下划线的为主码
学院(学院代码,学院名称)
学生(学号,姓名,性别,学院代码),学院代码为外码
教师(教师号,教师姓名,学院代码),学院代码为外码
课程(课程号,课程名,学时)
学习(学号,课程号,成绩),学号为外码,课程号为外码
开课(教师号,课程号),教师号为外码,课程号为外码
二、实验目的
熟练掌握SQL的各种数据定义功能,包括
1.定义表的功能,包括主码和外码的定义
2.修改表的定义功能,包括增加属性,删除属性,修改属性类型
4.建立和删除索引操作,理解索引的作用
5.删除表功能
三、实验步骤及运行结果
创建学院表:
createtable学院
(学院代码char(6)primarykey,
学院名称char(8))
创建学生表:
createtable学生
(学号char(8)primarykey,
姓名char(8),
性别char
(2),
学院代码char(6)references学院(学院代码)
);
创建教师表:
createtable教师
(教师号char(8)primarykey,
教师姓名char(8),
学院代码char(6)references学院(学院代码)
);
创建课程表:
createtable课程
(课程号char(8)primarykey,
课程名char(8),
学时char(8));
创建学习表:
createtable学习
(学号char(8),
课程号char(8),
成绩smallint,
primarykey(学号,课程号),
foreignkey(学号)references学生(学号),
foreignkey(课程号)references课程(课程号));
创建开课表:
createtable开课
(教师号char(8),
课程号char(8),
primarykey(教师号,课程号),
foreignkey(教师号)references教师(教师号),
foreignkey(课程号)references课程(课程号));
2.对各表进行增加、删除、修改属性操作
添加操作:
对学生表添加出生日期字段,和家庭地址字段,教师表增加性别字段,出生日期字段,对课程表增加先修课程字段。
学生表添加出生日期:
altertable学生add出生日期datetime;
学生表添加家庭地址:
altertable学生add家庭地址char(20);
教师表增加性别:
altertable教师add性别char(6);
教师表增加出生日期:
altertable教师add出生日期date;
课程表增加先修课程:
altertable课程add先修课程char(10);
删除操作:
删除学生表家庭地址字段,删除教师表出生日期字段
删除学生表家庭地址:
altertable学生dropcolumn家庭地址;
删除教师表出生日期:
altertable教师dropcolumn出生日期;
修改操作:
修改先课程表中先修课程字段名称为先修课程号,修改学生姓名字段数据长度为10。
修改先课程表中先修课程字段名称为先修课程号:
altertable课程dropcolumn先修课程;
altertable课程add先修课程号char(8);
修改学生姓名字段数据长度为10:
altertable学生altercolumn姓名char(10);
3.建立索引
为学生表在学生姓名上建立名为sname-index的索引,在学院代码字段上建立名为dept-index,降序。
学生表在学生姓名上建立名为sname-index的索引:
createuniqueindexsname_indexon学生(姓名);
学院代码字段上建立名为dept-index,降序:
createuniqueindexdept_indexon学院(学院代码desc);
4.删除表操作
删除上述表,重新执行查询再次建立各表
Droptable学院cascade
四、实验体会
通过实验,将以前用手写程序中出现的问题发现出来,在书写中不知道程序中的毛病,经过实验之后对错误映像更深刻,以后多加强上机操作。
实验二:
练习SQL数据操纵功能
一、实验内容及要求
1.求选修了某个老师上课的学生,成绩在90分以上的姓名、课程名称和成绩;
2.求选修了某个老师所授全部课程的学生姓名和学院名称;
3.求没有选修某门课程的学生学号和姓名;
4.求至少选修了两门课程的学生学号;
5.求某门课程不及格学生姓名和考试成绩
6.求至少选修了与某个同学选修的课程相同的学生学号
7.求至少选修了某两门课程的学生姓名和学院名称。
8.查询某个同学没有选修的课程号和课程名
9.查询没有被任何学生选修的课程的课程号
10.求选修了全部课程的学生姓名
11.查询各学院某门课程的平均分,并按照成绩从高到低的顺序排列。
12.查询选修数据库原理课程的学生姓名和所在院系,结果按各院系排列,同时成绩从高到低排列。
13.求学时在30-45之间(含30和45)的课程的课程号和课程名称及授课教师。
14.检索选修数据库原理课程的最高分学生的姓名
15.查询选课人数超过50(根据情况自己定人数)人的课程的课程号及课程名。
16.自行提出查询要求,内容包括并运算、差运算、交运算、笛卡儿积运算、连接运算、自然连接运算以及复杂统计表。
二、实验目的
使用SQL语句进行各种查询
1、熟练掌握单表查询,包括
(1)选择表中的若干列(投影)
(2)选择表中的若干元组(选择)(3)对查询结果排序(4)使用集函数(5)对查询结果分组
2、熟练掌握复杂查询,包括1)等值与非等值连接查询2)自身连接:
一个表与其自己进行连接。
3)外连接查询4)复合条件连接:
WHERE子句中可以有多个连接条件。
3、熟练掌握嵌套查询,包括1)带有IN谓词的子查询2)带有比较运算符的子查询(子查询一定要跟在比较符之后)3)带有ANY或ALL谓词的子查询(使用ANY和ALL时必须同时使用比较运算符)4)带有EXISTS谓词的子查询(查询结果不返回任何数据,只产生逻辑“真”或“假”)
4、使用SQL和ACCESS结合完成一些复杂的统计
三、实验步骤及运行结果
1.求选修了某个老师上课的学生,成绩在90分以上的姓名、课程名称和成绩;
SELECT学生.姓名,学习.成绩,课程.课程名
FROM学生,学习,教师,开课,课程
WHERE学习.成绩>=90
and教师.教师姓名='王力宏'
and课程.课程号=学习.课程号
and教师.教师号=开课.教师号
and开课.课程号=学习.课程号
and开课.课程号=课程.课程号
and学习.学号=学生.学号;
2.求选修了某个老师所授全部课程的学生姓名和学院名称;
SELECT姓名,学院名称
FROM学生,学院,学习,教师,开课
WHERE学习.学号=学生.学号
and学生.学院代码=学院.学院代码
and教师.教师号=开课.教师号
and开课.课程号=学习.课程号
and教师.教师姓名='王力宏'
GROUPBY姓名,学院名称
HAVINGcount(姓名)=
(selectcount(课程号)
from开课,教师
where教师.教师号=开课.教师号
and教师.教师姓名='王力宏'
havingcount(课程号));
3.求没有选修某门课程的学生学号和姓名;
SELECT学号,姓名
FROM学生
WHEREnotexists
(select*
from学习
where学生.学号=学习.学号
and学习.课程号='1001');
4.求至少选修了两门课程的学生学号;
SELECT学号
FROM学习
WHERE学号
GROUPBY学号
HAVINGcount(课程号)>=2;
5.求某门课程不及格学生姓名和考试成绩
SELECT学生.姓名,学习.成绩
FROM学生,学习
WHERE学习.课程号='1002'And学习.成绩<60And学习.学号=学生.学号;
6.求至少选修了与某个同学选修的课程相同的学生学号
SELECTDISTINCT学号
FROM学习
WHEREnotexists
(select*
from学生
where学生.姓名='武松'
andnotexists
(select*
from学习
where学习.学号=学生.学号
and学习.课程号=学习.课程号));
7.求至少选修了某两门课程的学生姓名和学院名称。
SELECT姓名,学院名称
FROM学生,学院
WHERE学生.学院代码=学院.学院代码and学生.学号in
(select学习.学号
from学习,课程
where学习.课程号=课程.课程号
and课程名in('数据库','微机原理')
groupby学号
havingcount(学习.学号)>=2);
8.查询某个同学没有选修的课程号和课程名
SELECT课程号,课程名
FROM课程
WHEREnotexists
(select*
from学习,学生
where学生.姓名='杨过'
and学生.学号=学习.学号
and课程.课程号=学习.课程号);
9.查询没有被任何学生选修的课程的课程号
SELECT课程号
FROM课程
WHEREnotexists
(select课程号
from学习
where学习.课程号=课程.课程号);
10.求选修了全部课程的学生姓名
SELECT姓名
FROM学生
WHEREnotexists
(select*
from课程
wherenotexists
(select*
from学习
where学号=学生.学号and课程号=课程.课程号));
11.查询各学院某门课程的平均分,并按照成绩从高到低的顺序排列。
SELECT学院.学院名称,avg(成绩)AS数据库平均分
FROM学习,课程,学院,学生
WHERE课程.课程名='数据库'And学习.课程号=课程.课程号And学习.学号=学生.学号And学生.学院代码=学院.学院代码
GROUPBY学院名称
ORDERBY'数据库平均分'DESC;
12.查询选修数据库原理课程的学生姓名和所在院系,结果按各院系排列,同时成绩从高到低排列。
SELECT学院.学院名称,学生.姓名,学习.成绩
FROM学习,课程,学院,学生
WHERE课程.课程名='数据库'And学习.课程号=课程.课程号And学习.学号=学生.学号And学生.学院代码=学院.学院代码
GROUPBY学院名称,姓名,成绩
ORDERBY成绩DESC;
13.求学时在30-45之间(含30和45)的课程的课程号和课程名称及授课教师。
SELECT课程.课程名,课程.课程号,教师.教师姓名
FROM课程,教师,开课
WHERE课程.学时>='30'
And课程.学时<='45'
And课程.课程号=开课.课程号
And开课.教师号=教师.教师号;
14.检索选修数据库原理课程的最高分学生的姓名
SELECT姓名
FROM学生,学习,课程
WHERE课程.课程号=学习.课程号
and学生.学号=学习.学号
and课程.课程名='数据库'
and成绩in
(selectmax(成绩)
from学习,课程
where课程.课程号=学习.课程号
and课程.课程名='数据库');
15.查询选课人数超过50(根据情况自己定人数)人的课程的课程号及课程名。
SELECT课程名,课程.课程号
FROM课程,学习
WHERE课程.课程号=学习.课程号
GROUPBY课程名,课程.课程号
HAVINGcount(学号)>3;
16.自行提出查询要求,内容包括并运算、差运算、交运算、笛卡儿积运算、连接运算、自然连接运算以及复杂统计表
四、实验体会
通过实验,将以前用手写程序中出现的问题发现出来,在书写中不知道程序中的毛病,经过实验之后对错误映像更深刻,以后多加强上机操作。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 原理 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)