《数据库原理及应用》课程设计.docx
《《数据库原理及应用》课程设计.docx》由会员分享,可在线阅读,更多相关《《数据库原理及应用》课程设计.docx(29页珍藏版)》请在冰点文库上搜索。
《数据库原理及应用》课程设计
《数据库原理及应用》
课程实习报告
学号:
姓名:
时间:
2009年6月19日
目录
1数据库的建立3
1.1数据库及数据表结构3
1.2数据表数据3
2.数据库简单查询及连接查询5
2.1基本操作实验5
2.2提高实验8
3.数据库的嵌套查询10
4.数据库的组合查询和统计查询13
5.数据库视图及图表定义17
1数据库的建立
1.1数据库及数据表结构
1.2数据表数据
学生数据表
课程数据表
选课数据表
附录图书——借阅数据表结构
借阅数据表
读者数据表
图书数据表
2数据库的简单查询和连接查询
2.1基本实验操作
(1)简单查询操作
1)求计算机系学生的学号与姓名
select学号,姓名
from学生
where所在系='计算机'
运行结果
2)求选修了课程的学生学号
selectdistinct学号
from选课
运行结果
3)求选修了00011课程的学生学号和成绩,并要求对查询结果按成绩的降序排列,如果成绩相同,则按学号的升序排列。
select学号,成绩
from选课
where课程号='00011'
Orderby成绩desc,学号asc
运行结果
4)求选修了课程00011且成绩在70—90之间的学生学号和成绩,并将成绩乘以系数0.8.
select学号,成绩*0.8
from选课
where课程号='00011'and成绩between70and90
运行结果
5)求数学系或物理系姓高的学生的信息。
select*
from学生
where所在系in('数学','物理')and姓名like'高%'
运行结果
6)求缺少了成绩的学生的学号和课程号
select学号,课程号
from选课
where成绩isnull
运行结果
7)查找这样的图书类别:
要求类别中最高的图书定价不低于全部按类别分组的图书的平均定价的1.5倍。
selectA.类别
from图书A
groupbyA.类别
havingmax(A.定价)>=all(select2*AVG(B.定价)from图书B
groupbyB.类别)
运行结果
(2)连接查询实验
1)查询每个学生的情况以及所选修的课程。
select学生.*,选课.*
from学生,选课
where学生.学号=选课.学号
运行结果
2)求学生的学号,姓名,选修的课程名以及成绩
select学生.学号,姓名,课程名,成绩
from学生,选课,课程
where学生.学号=选课.学号and课程.课程号=选课.课程号
运行结果
3)求选修了00011课程且成绩为90分以上的学生的学号,姓名以及成绩。
select学生.学号,姓名,成绩
from学生,选课
where学生.学号=选课.学号and课程号='00011'and成绩
运行结果
4)查询每一门课的间接先行课(即是先行课的先行课)
selectA.课程号,A.课程名,B.先行课
from课程A,课程B
whereA.先行课=B.课程号
运行结果
5)查询读者的编号,姓名,单位,所借书号,书名,借阅日期
select编号,姓名,单位,借阅.书号,书名,借阅日期
from读者innerjoin借阅on编号=读者编号innerjoin图书on借阅.书号=图书.书号
orderby编号asc
运行结果
2.2提高操作实验
1)学生与选课内连接:
查询结果中只保留匹配的元组
select学生.*,姓名,所在系
from学生,选课
where学生.学号=选课.学号
2)学生与选课左外连接:
左外连接符号”*=”,在查询结果中保留连接表达式左表中的非匹配记录
select学生.*,姓名,所在系
from学生,选课
where学生.学号*=选课.学号
3)选课与课程内连接:
select选课.*,课程名
from选课,课程
where课程.课程号=选课.课程号
4)选课与课程的右外连接:
左外连接符号”=*”,在查询结果中保留连接表达式右表中的非匹配记录
select选课.*,课程名
from选课,课程
where选课.课程号=*课程.课程号
3数据库的嵌套查询
3.1基本实验操作
1)求选修了高等数学的学生的学号和姓名
select学号,姓名
from学生
where学号in(select学号
from选课
where课程号in(select课程号
from课程
where课程名='高等数学')
)
2)求高等数学的成绩高于高山的学生的学号和成绩
select学号,成绩
from选课,课程
where选课.课程号=课程.课程号and课程名='高等数学'and成绩>(select成绩
from选课,课程,学生where选课.课程号=课程.课程号and课程名='高等数学'and选课.学号=学生.学号and姓名='高山')
3)求其他系中比计算机系中某一学生年龄小的学生
select*
from学生
where年龄'计算机系')
4)求其他系中比数学系的学生年龄都大的学生
select*
from学生
where年龄>All(select年龄from学生where所在系='数学系')and所在系<>'数学系'
5)求选修了00011课程的学生姓名
select姓名
from学生
whereexists(select*from选课where学生.学号=学号and课程号='00011')
6)求没有选修00011课程的学生姓名
select姓名
from学生
wherenotexists(select*from选课where学生.学号=学号
and课程号='00011')
7)查询选修了全部课程的学生姓名
select姓名
from学生
wherenotexists(select*from课程wherenotexists
(select*from选课where学生.学号=学号and课程.课程号=课程号))
8)求选修了学号为78001的学生所选的全部课程的学生的姓名与学号
select学号,姓名
from学生
wherenotexists(select*from选课选课1where选课1.学号='78001'andnotexists
(select*from选课选课2where学生.学号=选课2.学号and选课2.课程号=选课1.课程号))
4数据库的组合查询与统计查询
4.1基本操作实验
1)查找这样的图书类别:
要求类别中最高的图书定价不低于全部按类别分组的图书的平均定价的1.5倍。
selectA.类别
from图书A
groupbyA.类别
havingmax(A.定价)>=all(select1.5*avg(B.定价)
from图书BgroupbyB.类别)
2)求高等教育出版社出版的各种图书的平均定价,用groupby表示
select类别,avg(定价)平均定价
from图书
where出版社='高教版'
groupby类别
orderby类别asc
3)列出数学类书的书号,书名,价格,并求出各出版社这类书的总价格
select书号,书名,定价
from图书
where类别='数学'
orderby书号asc
computecount(书号),sum(定价)
4)列出数学类图书的书号,书名,价格以及各出版社这类数的总价格
select书号,书名,定价
from图书
where类别='数学'
orderby出版社
computecount(书号),sum(定价)by出版社
computecount(书号),sum(定价)
5)查询数学类和机工社出版的图书
select*
from图书
where类别='数学'
unionall
select*
from图书
where出版社='机工社'
4.2提高操作实验
1)求选修了课程00011并且选修了课程00012的学生学号
select学号
from选课
where课程号='00011'
intersect
select学号
from选课
where课程号='00012'
2)求选修了课程00011但没有选修00021的学生学号
select学号
from选课
where课程号='00011'
minus
select学号
from选课
where课程号='00021'
3)求学生的总人数
selectcount(*)
from学生
4)求选修了课程的学生人数
selectcount(distinct学号)
from选课
5)求课程和选修该课程的人数
select课程号,count(学号)
from选课
groupby课程号
6)求选修了超过3门课的学生学号
select学号
from选课
groupby学号havingcount(*)>3
5数据库的视图和图表定义
5.1基本操作实验
1)在SQLSever企业管理器中,调出创建视图向导,在图书-读者库中按下列Transact-SQL描述创建读者视图.
2)在SQLServer企业管理器中调出创建视图向导,按要求定义借阅__物理图书视图。
3)在SQLSever企业管理器中调出创建图表向导,完成在图书_读者数据库中建立一个图书_借阅图表操作,要求该图表包括图书和借阅两个表,并包括图书与借阅之间的,符合表达式‘‘图书.书号=借阅.书号’’的,外码与被参照表之间的关联。
5.2提高操作实验
1)建立物理系学生的视图
2)由学生,课程,和选课3个表,定义一数学系的学生成绩视图,属性包括学号,姓名,课程名和成绩。
3)将学生的学号,总成绩,平均成绩定义成一个视图。