数据库SQL实验报告交互式查询连接查询及嵌套查询Word下载.docx
《数据库SQL实验报告交互式查询连接查询及嵌套查询Word下载.docx》由会员分享,可在线阅读,更多相关《数据库SQL实验报告交互式查询连接查询及嵌套查询Word下载.docx(14页珍藏版)》请在冰点文库上搜索。
外连接查询
复合条件连接查询
实验主要任务:
在实验2建立的数据库中,用SQL语句完成下列查询任务
1.查询所有学生的选课情况,列出学号、姓名、课程号、课程名、成绩、学分。
2.查询所有低于60分的学生成绩记录,并按学号排序列表,列出学号、姓名、课程号、课程名、成绩。
3.查询选修2号课程且成绩在90分以上的所有学生的学号、姓名、成绩。
4.查询“计算机系”职称为“教授”的老师的记录。
5.查询由“计算机系”的开课的课程。
6.查询“数据结构”的先行课名称。
7.查询同时选修了课程号为“1”和“2”的学生学号。
8.查询计算机系全体学生的“数据结构”成绩,列出学号、姓名、课程名、成绩,并按成绩降序列表。
9.查询其他系中比信息系所有学生年龄都小的学生姓名及年龄。
10.查询没有选修1号课程的学生。
11.查询选修了全部课程的学生姓名。
12.查询学校中与老师同名的学生姓名
13.查询每一门课的间接先修课(即先修课的先修课)。
14.查询每个学生及其选修课程的情况包括没有选修课程的学生,列出学号、姓名、课程号、课程名、成绩、学分,没有选修课程的学生只列出学号、姓名。
(提示:
用外连接)。
以下内容填写请依照查询1逐题自己复制或插入新行,再将题目粘贴到适当位置,然后在执行代码成功后,截取屏幕上的运行代码及结果,贴到合适位置,并填写结果是否正确,最后对所采用的方法进行分析。
每题格式相同,请参照下面的查询1。
查询1:
查询所有学生的选课情况,列出学号、姓名、课程号、课程名、成绩、学分
代码及执行结果:
select学生.学号,学生.姓名,选课.课程号,课程.课程名,选课.成绩,课程.学分
from学生,选课,课程
where学生.学号=选课.学号and选课.课程号=课程.课程号
结果是否正确:
正确
方法分析:
三个表的连接
查询2:
查询所有低于80分的学生成绩记录,并按学号排序列表,列出学号、姓名、课程号、课程名、成绩。
代码及执行结果:
select学生.学号,学生.姓名,课程.课程号,课程.课程名,选课.成绩
from学生,选课,课程
where选课.课程号=课程.课程号and学生.学号=选课.学号and选课.成绩<
80
orderby学生.学号
方法分析:
orderby排序,默认为升序
查询3:
查询选修0002号课程且成绩在90分以上的所有学生的学号、姓名、成绩
select学生.学号,学生.姓名,选课.成绩
from学生,选课
where学生.学号=选课.学号and选课.课程号='
0002'
and成绩>
90
两个表的连接
查询4:
查询“计算机系”职称为“教授”的老师的记录
select教师.*from系,教师
where系.系名='
计算机'
and教师.职称='
教授'
and系.系编号=教师.系编号
两个表的等值连接
查询5:
查询由“计算机系”的开课的课程
select选课.课程号,课程.课程名,系.系名as所在系
from选课,系,课程
and课程.系编号=系.系编号and课程.课程号=选课.课程号
查询6:
查询“数据结构”的先行课名称
selecta.课程名,b.课程名as先行课from课程a,课程b
wherea.先行课=b.课程号anda.课程名='
数据结构'
给表重命名,然后两个新表连接查询
查询7:
查询同时选修了课程号为“0001”和“0002”的学生学号
代码及执行结果
select学号as选修了1和2号课程的学生的学号from选课
where学号in(select学号from选课where课程号='
0001'
)
and课程号='
嵌套查询
查询8:
查询计算机系全体学生的“数据结构”成绩,列出学号、姓名、课程名、成绩,并按成绩降序列表
select选课.学号,学生.姓名,课程.课程名,选课.成绩from学生,课程,选课,系
and课程.课程名='
and课程.课程号=选课.课程号
and系.系编号=课程.系编号and学生.学号=选课.学号
orderby选课.成绩DESC
四个表的等值连接
orderby排序,默认为升序,可以使用ASC,降序可以使用DESC
查询9:
查询其他系中比信管系所有学生年龄都小的学生姓名及年龄
select学生.姓名,year(getdate())-year(出生日期)as年龄
from学生,系
where学生.系编号=系.系编号and系.系名<
>
'
信管'
and
year(getdate())-year(出生日期)<
all(selectyear(getdate())-year(出生日期)
from学生,系where系.系编号=学生.系编号and系.系名='
)
使用了嵌套查询
使用了all,表示所有的都需要满足
查询10:
查询没有选修0001号课程的学生
selectdistinct学生.学号,学生.姓名
where学生.学号=选课.学号and
学生.学号notin(selectdistinct学生.学号from学生,选课where课程号='
and学生.学号=选课.学号)
嵌套查询,distinct删除重复的
查询11:
查询选修了全部课程的学生姓名
select学生.姓名
from学生
where学号in(select学号from选课groupby学号havingcount(*)=(selectcount(*)from课程))
使用选课数目相同查询
也可以使用exists关键字查询
查询12:
查询学校中与老师同名的学生姓名
select学生.姓名
from学生,教师
where学生.姓名=教师.姓名
查询13:
查询每一门课的间接先修课(即先修课的先修课)
selecta.课程名,b.课程名直接先行课,c.课程名间接先行课
from课程a,课程b,课程c
wherea.先行课=b.课程号andb.先行课=c.课程号
给同一个表重命名
用三个新表连接查询
查询14:
查询每个学生及其选修课程的情况包括没有选修课程的学生,列出学号、姓名、课程号、课程名、成绩、学分,没有选修课程的学生只列出学号、姓名。
用外连接)
from(学生leftouterjoin选课on选课.学号=学生.学号)leftouterjoin课程on课程.课程号=选课.课程号
使用左外连接
使用左外连接的结果再与第三个表左外连接
总结你在完成查询任务1-14的过程中遇到的主要问题及解决的方法:
不在表内查询
所以查询时候提示对象名无效
使用语句:
use+数据库名
这样就可以查询了
总结本次实验涉及到的基本原理:
(语法等)
多表连接
左外连接
表内连接
关键字:
all,DESC,exists等
本次实验小结:
exists的用法还是不太熟悉
要求:
1.报告格式和内容要求:
a.内容和格式整齐。
大标题采用黑体四号字加粗,小标题采用小四号字加粗。
正文采用五号宋体,单倍行距。
b.贴图时请剪裁到适当大小,要保证打印时可以看清,但也不要太大以免“越界”。
c.不要在报告中写与实验无关的话,内容要有条理、完整、并能突出重点,要将遇到的主要问题说明。
2.提交方式和时间:
一周内完成。
可以将文件包发到我邮箱******@。
注明主题:
“交SQL作业”。
3.提交文件格式要求:
a.将实验成果放入一个文件夹中,文件夹的内容包括:
本实验报告、分离后的数据库、如有查询代码(.sql文件)和其它文件也一并放入。
b.文件夹以“学号姓名班级_S5”为文件名。
注意:
你的学号放在姓名前。
c.注意:
所有文件保存后关闭,然后再打包成RAR文件,以免提交的内容丢失或打不开。
4.主动查阅资料,坚持自己亲手完成实验,弄清每个步骤和相关原理。