数据库原理实验报告.docx
《数据库原理实验报告.docx》由会员分享,可在线阅读,更多相关《数据库原理实验报告.docx(23页珍藏版)》请在冰豆网上搜索。
数据库原理实验报告
《数据库原理》
实
验
报
告
学号:
____xxxxxxxxx_____
姓名:
_____xxxxxxxxx____
班级:
___xxxxxxxxxxxx___
指导教师:
___xxxxxxx___
中国矿业大学计算机科学与技术学院
2013年3月30日
实验一运用SQL语言建立数据库
一、实验目的
1、熟悉Access2000的工作环境,学会在图形用户界面(GUI)和SQL视图两种环境下实现数据定义和数据操纵功能。
2、掌握在图形用户界面中建立数据库、定义基本表、索引、修改表结构、编辑表中的数据等操作的方法。
3、掌握在图形用户界面中建立表之间联系的方法。
二、实验要求
1、实验之前认真查阅相关资料,准备好基本表中的数据。
2、认真实验,将讲课中的操作方法逐一应用到新建的数据库中,观察和记录实验结果。
三、实验内容
1、熟悉Access2000的工作环境
(1)进入Access2000,了解Access图形用户界面中的对象(包括基本表、查询、窗体、报表、数据访问页、宏和模块)的含义。
(2)掌握建立对象的基本方法(包括“使用设计器创建”和“使用向导创建”)。
通过Access2007在如图此处可以创建对象:
2、定义和修改基本表
(1)定义基本表、索引、约束(主码约束、外码约束、用户完整性约束)。
(2)修改表结构:
插入新的字段、删除字段、修改字段名称和类型、修改索引、重新排列字段顺序。
(3) 编辑表中的数据:
改变字段的排列顺序、隐藏和显示列、冻结列、改变字段的宽度和记录的高度、改变记录的显示字体、在表中排序。
方法:
通过在设计查询中的SQL视图来填写代码的形式定义基本表、索引以及约束,同时运用填写代码的形式去修改基本表,然后再进行填写实验数据,最终得以完成实验。
3、建立表之间的联系
(1)在图形用户界面中建立多表之间的联系。
(2)通过定义主码和外码自动实现表之间的联系。
(3)编辑联系的属性。
打开Access2007,然后在Access2007中创建空白数据库,进入数据创建界面,点击创建,选择设计查询,选择SQL视图,用在其中填写代码的形式来定义基本表,包括:
学生表、课程表、教师表和学习表。
创建学生表(代码):
CREATETABLE学生
(
学号CHAR(10),
姓名CHAR(20),
性别CHAR
(2),
年龄INT,
院系CHAR(20),
PRIMARYKEY(学号)
)
创建课程表(代码):
CREATETABLE课程
(
课程号CHAR(10),
课程名CHAR(20),
PRIMARYKEY(课程号)
)
创建教师表(代码):
CREATETABLE教师
(
教师号CHAR(10),
教师名CHAR(20),
性别CHAR
(2),
PRIMARYKEY(教师号)
)
创建学习表(代码):
CREATETABLE学习
(
学号CHAR(10),
课程号CHAR(10),
教师号CHAR(10),
成绩INT,
PRIMARYKEY(学号,课程号),
FOREIGNKEY(学号)REFERENCES学生(学号),
FOREIGNKEY(课程号)REFERENCES课程(课程号)
)
通过以上步骤,完成对基本表的创建,并填入数据(如上图所示),然后对数据进行查询
1、查询学生院系为计算机的学生:
2、查询课程
3、查询性别为女的教师
4、查询成绩小于90的学生的学号
所建数据库各表之间的关系为:
四、实验体会:
实验二运用SQL语言实现数据库的查询功能
一、实验目的
1、掌握SQL的数据定义功能,实现对基本表、约束和索引的定义和修改。
2、掌握SQL的数据操纵功能,实现对表中数据的添加、删除和修改。
3、重点掌握SQL的数据查询功能,利用简单查询、复杂查询和嵌套查询完成预先给出的查询要求。
二、实验要求
1、实验之前认真查阅相关资料,准备好实验方案。
2、认真实验,对实验过程、结果进行分析,注意验证实验效果。
三、实验内容
1、建立和完善如下关系(其中带有下划线的为主码):
学院(学院代码,学院名称)
学生(学号,姓名,性别,学院代码)学院代码为外码;
教师(教师号,教师姓名,学院代码)学院代码为外码;
课程(课程号,课程名,学时);
学习(学号,课程号,成绩)学号为外码,课程号为外码;
开课(教师号,课程号)教师号为外码,课程号为外码
实验步骤:
(1)创建学院表
查询→在设计视图中创建查询→选择SQL视图,输入如下SQL语句:
CREATETABLE学院
(
学院代码CHAR(8)NOTNULLUNIQUE,
学院名称CHAR(20),
PRIMARYKEY(学院代码)
);
运行结果:
(2)创建学生表
查询→在设计视图中创建查询→选择SQL视图,输入如下SQL语句:
CREATETABLE学生
(
学号CHAR(8),
姓名CHAR(20),
性别CHAR
(2),
学院代码CHAR(8),
PRIMARYKEY(学号),
FOREIGNKEY(学院代码)REFERENCES学院(学院代码)
);
运行结果:
(3)创建教师表
查询→在设计视图中创建查询→选择SQL视图,输入如下SQL语句:
CREATETABLE教师
(
教师号CHAR(8),
教师姓名CHAR(10),
学院代码CHAR(8),
PRIMARYKEY(教师号),
FOREIGNKEY(学院代码)REFERENCES学院(学院代码)
);
运行结果:
(4)创建课程表
查询→在设计视图中创建查询→选择SQL视图,输入如下SQL语句:
CREATETABLE课程
(
课程号CHAR(8)NOTNULLUNIQUE,
课程名CHAR(20),
学时SMALLINT,
PRIMARYKEY(课程号)
);
运行结果:
(5)创建学习表
查询→在设计视图中创建查询→选择SQL视图,输入如下SQL语句:
CREATETABLE学习
(
学号CHAR(8),
课程号CHAR(8),
成绩SMALLINT,
PRIMARYKEY(学号,课程号),
FOREIGNKEY(学号)REFERENCES学生(学号),
FOREIGNKEY(课程号)REFERENCES课程(课程号)
);
运行结果:
(6)创建开课表
查询→在设计视图中创建查询→选择SQL视图,输入如下SQL语句:
CREATETABLE开课
(
教师号CHAR(8),
课程号CHAR(8),
PRIMARYKEY(教师号,课程号),
FOREIGNKEY(教师号)REFERENCES教师(教师号),
FOREIGNKEY(课程号)REFERENCES课程(课程号)
);
运行结果:
各表之间的关系:
2.使用SQL语句完成如下查询操作
(1)查询选修了“李梦”老师上课的学生,成绩在90分以上的姓名、课程名称和成绩;
查询→在设计视图中创建查询→选择SQL视图,输入如下SQL语句:
SELECT姓名,课程名,成绩
FROM学生,课程,学习,教师,开课
WHERE教师姓名='李梦'
And成绩>90
And学生.学号=学习.学号
And学习.课程号=课程.课程号
And教师.教师号=开课.教师号
And开课.课程号=课程.课程号;
查询结果:
(2)查询选修了“张航”所授全部课程的学生姓名和学院名称;
查询→在设计视图中创建查询→选择SQL视图,输入如下SQL语句:
SELECT姓名,学院名称
FROM学生,学院
WHERE学生.学院代码=学院.学院代码
ANDNOTEXISTS
(SELECT课程号
FROM开课
WHERE教师号='T09'
ANDNOTEXISTS
(SELECT*
FROM学习
WHERE学号=学生.学号
AND课程号=开课.课程号)
);
查询结果:
(3)查询没有选修“概率论”的学生学号和姓名;
查询→在设计视图中创建查询→选择SQL视图,输入如下SQL语句:
SELECT学号,姓名
FROM学生
WHERENOTEXISTS
(SELECT*
FROM学习,课程
WHERE课程名='概率论'
AND学生.学号=学习.学号
AND课程.课程号=学习.课程号);
查询结果:
(4)查询至少选修了两门课程的学生学号;
查询→在设计视图中创建查询→选择SQL视图,输入如下SQL语句:
SELECT学号
FROM学习
GROUPBY学号
HAVINGCOUNT(课程号)>=2;
查询结果:
→→→→→
(5)查询“英语”不及格学生姓名和考试成绩;
查询→在设计视图中创建查询→选择SQL视图,输入如下SQL语句:
SELECT姓名,成绩
FROM课程,学习,学生
WHERE课程.课程名='英语'
And成绩<60
And学习.学号=学生.学号
And学习.课程号=课程.课程号;
查询结果:
(6)查询至少选修了与“杨帆”选修的课程相同的学生学号;
查询→在设计视图中创建查询→选择SQL视图,输入如下SQL语句:
SELECTDISTINCT学号
FROM学习ASA
WHERENOTEXISTS
(SELECT*
FROM学习ASB
WHEREB.学号='010114'
ANDNOTEXISTS
(SELECT*
FROM学习ASC
WHEREA.学号=C.学号
ANDB.课程号=C.课程号)
);
查询结果:
(7)查询至少选修了“数据结构”和“C++”的学生姓名和学院名称;
查询→在设计视图中创建查询→选择SQL视图,输入如下SQL语句:
SELECT姓名,学院名称
FROM学生,学习,学院
WHERE学生.学院代码=学院.学院代码
AND学习.学号=学生.学号
AND课程号='C04'
AND学生.学号IN
(SELECT学号
FROM学习
WHERE课程号='C05');
查询结果:
(8)查询“陆瑶”同学没有选修的课程号和课程名;
查询→在设计视图中创建查询→选择SQL视图,输入如下SQL语句:
SELECT课程号,课程名
FROM课程
WHERE课程号NOTIN
(SELECT课程号
FROM学习,学生
WHERE学生.学号=学习.学号
AND姓名='陆瑶');
查询结果:
(9)查询没有被任何学生选修的课程的课程号;
查询→在设计视图中创建查询→选择SQL视图,输入如下SQL语句:
SELECT课程号
FROM课程
WHERE课程号NOTIN
(SELECT课程号
FROM学习);
查询结果:
(10)查询选修了全部课程的学生姓名;
查询→在设计视图中创建查询→选择SQL视图,输入如下SQL语句:
SELECT姓名
FROM学生,学习
WHERE学生.学号=学习.学号
GROUPBY姓名
HAVINGCOUNT(课程号)=
(SELECTCOUNT(*)
FROM课程);
查询结果:
(11)查询各学院每门课程的平均分,并按照成绩从高到低的顺序排列;
查询→在设计视图中创建查询→选择SQL视图,输入如下SQL语句:
SELECT课程名,AVG(成绩)AS平均分
FROM学习,课程
WHERE课程.课程号=学习.课程号
GROUPBY课程名
ORDERBYAVG(成绩)DESC;
查询结果:
(12)查询选修数据库原理课程的学生姓名和所在院系,结果按各院系排列,同时成绩从高到低排列;
查询→在设计视图中创建查询→选择SQL视图,输入如下SQL语句:
SELECT姓名,学院名称,成绩
FROM学生,学习,学院,课程
WHERE学生.学号=学习.学号
AND学生.学院代码=学院.学院代码
AND课程.课程号=学习.课程号
AND课程名='数据库原理'
ORDERBY学院名称,成绩DESC;
查询结果:
(13)查询学时在30-45之间(含30和45)的课程的课程号和课程名称及授课教师;
查询→在设计视图中创建查询→选择SQL视图,输入如下SQL语句:
SELECT课程.课程号,课程名,教师姓名
FROM教师,课程,开课
WHERE教师.教师号=开课.教师号
AND课程.课程号=开课.课程号
AND学时BETWEEN30AND45;
查询结果:
(14)检索选修数据库原理课程的最高分学生的姓名;
查询→在设计视图中创建查询→选择SQL视图,输入如下SQL语句:
SELECT姓名
FROM学生,学习,课程
WHERE学生.学号=学习.学号
AND学习.课程号=课程.课程号
AND成绩=
(SELECTMAX(成绩)
FROM学习
WHERE学习.课程号=课程.课程号
AND课程名='数据库原理');
查询结果:
(15)查询选课人数超过3人的课程的课程号及课程名;
查询→在设计视图中创建查询→选择SQL视图,输入如下SQL语句:
SELECT课程.课程号,课程名
FROM课程,学习
WHERE学习.课程号=课程.课程号
GROUPBY课程.课程号,课程名
HAVINGCOUNT(学号)>3;
查询结果:
(16)查询选修了C02号或C06号课程或二者都选修了的学生学号、课程号和成绩;
查询→在设计视图中创建查询→选择SQL视图,输入如下SQL语句:
(SELECT学号,课程号,成绩
FROM学习
WHERE课程号='C02')
UNION
(SELECT学号,课程号,成绩
FROM学习
WHERE课程号='C06');
查询结果:
四、实验体会