
数据库实验报告
数学中的e-考研政治分析题
2023年2月19日发(作者:软枣子)MySQL查询实验报告_SQL实验⼆:数据库查询实验报告
实验⼆数据库的查询实验
⼀、实验⽬的和要求
(1)掌握SQLServer查询分析器的使⽤⽅法,加深对SQL和Transact-SQL语⾔的查询语句的理解。
(2)熟练掌握简单表的数据查询、数据排序和数据连接查询的操作⽅法。(3)熟练掌握数据查询中的分组、统计、计算和组合的操作⽅法。
⼆、实验内容和原理
在实验⼀定义的“学⽣成绩数据库”中,使⽤T-SQL语句完成以下查询:(1)求计算机系学⽣的学号和姓名。
(2)求选修了数学的学⽣学号、姓名和成绩。
(3)求选修01课程的学⽣学号和成绩,并要求对查询结果按成绩降序排列,如果成绩相同则按学号升序排列。
(4)查找选修课程的平均成绩位于前三名的学⽣的学号。(5)查询计算机系的姓刘且单名的学⽣的信息。(6)查询⾄少选修两门课程的学⽣学
号。
(7)查询学⽣的学号、课程号以及对应成绩与所有学⽣所有课程的最⾼成绩的百分⽐。
(8)查询选修“数据库”课程,且成绩在80分以上的学⽣的学号和成绩。(9)查询所有姓“王”的同学没有选修的课程名。(请分别⽤exists
和in完成该查询)
(10)查询选修了全部课程的学⽣的姓名。(请⾄少写出两种查询语句)(11)求选修了学⽣“95001”所选修的全部课程的学⽣学号和姓名。
(12)查询每⼀门课的间接先修课。
(13)列出所有学⽣所有可能的选课情况。
(14)列出每个学⽣的学号及选修课程号,没有选修的学⽣的学号也⼀并列出。(15)输出与“张三”同性别并位于同⼀个系的所有同学的姓
名。(请⾄少写出两种查询语句)
(16)查询⾄少被两名男⽣选修的课程名。
(17)对被两名以上学⽣所选修的课程统计每门课的选课⼈数。要求输出课程号和选修⼈数,查询结果按⼈数降序排列;若⼈数相同,按课程
号升序排列。(18)列出选修课程超过3门的学⽣姓名及选修门数。(19)检索⾄少选修课程号为01和03的学⽣姓名。
(20)检索⾄少选修课程“数学”和“操作系统”的学⽣学号。(21)查询‘操作系统’课程的最⾼分的学⽣的姓名、性别、所在系
(22)查询数据结构的成绩低于操作系统的成绩的学⽣姓名及该⽣的这两门课的成绩
(23)所有成绩都在70分以上的学⽣姓名及所在系。
三、实验环境
四、实验⽅法
1.将查询需求⽤Transact-SQL语⾔表⽰。
2.在SQLServer查询分析器的输⼊区中输⼊Transact-SQL查询语句。
3.发布执⾏命令,查看查询结果;如果结果不正确,进⾏修改,直到正确为⽌。4.查询分析器及使⽤⽅法。
查询分析器是在开发数据库应⽤系统时使⽤最多的⼯具。查询分析器的主要作⽤是编辑Transact-SQL,将其发送到服务器,并将执⾏结果
及分析显⽰出来(或进⾏存储)。查询分析功能主要通过测试查询成本,判断该查询是否需要增加索引以提⾼查询速度,并可以实现⾃动建⽴
索引的功能、查询分析器的界⾯如图1所⽰。
在查询分析器中的左边窗⼝是对象浏览器,其中按树结构列出了数据库对象;右上⽅是SQL代码区域.⽤于输⼊SQL的查询语句;右下⽅
为结果区,⽤于显⽰查询结果和分析结果、对
图1SQLServer2000查询分析器
于TSQL语句的执⾏结果,在结果区中可以有4种不同的输出形式:标准执⾏将结果直接显⽰在结果区:⽹格执⾏将结果以表格形式显⽰在
结果区;计划执⾏显⽰执⾏计划;索引分析为在结果区中显⽰查询的索引情况。上述输出形式,可以通过菜单或按钮选择。
五、调试过程
五、实验结果六、总结附录:
--(1)求计算机系学⽣的学号和姓名。selectsno,snamefromstudentwheresdept='计算机'
--(2)求选修了数学的学⽣学号、姓名和成绩。,sname,gradefromstudents,sc,coursec
==cname='数学'
--(3)求选修课程的学⽣学号和成绩,并要求对查询结果按成绩降序排列,如果成绩相同则按
学号升序排列。
selectsno,gradefromscwherecno='1'
orderbygradedesc,snoasc
--(4)查找选修课程的平均成绩位于前三名的学⽣的学号。selecttop3snofromscgroupbysno
orderbyavg(grade)desc
--(5)查询计算机系的姓刘且单名的学⽣的信息。select*fromstudent
wheresdept='计算机'andsnamelike'刘_'
--(6)查询⾄少选修两门课程的学⽣学号。selectsnofromscgroupbysnohavingcount(*)>=2
--(7)查询学⽣的学号、课程号以及对应成绩与所有学⽣所有课程的最⾼成绩的百分⽐。selectsno,cno,grade,最⾼成绩百分⽐=
grade*100/(selectmax(grade)fromsc)fromsc
--(8)查询选修“数据库”课程,且成绩在分以上的学⽣的学号和成绩。selectsno,gradefromcoursec,sc
wherecname='数据库'andgrade>=
--(9)查询所有姓“王”的同学没有选修的课程名。(请分别⽤exists和in完成该查询)--exists⽅法selectcnamefromcoursecwhere
notexists(
mstudents,sc
=snamelike'王%'=)--in⽅法
selectcnamefromcoursecwherecnonotin(
selectcno
fromstudents,sc
=snamelike'王%'=)
--(10)查询选修了全部课程的学⽣的姓名。(请⾄少写出两种查询语句)--法⼀
selectSnamefromstudentswherenotexists()
--法⼆
selectSnamefromstudentswhere(
selectcount(*)fromsc
wheresno=ect*fromcoursecwherenotexists()
select*fromsc
wheresno=cno=
)=(selectcount(*)fromcourse)--法三
selectSnamefromstudentwhereSnoin(
selectSnofromscgroupbysno
havingcount(*)=(selectcount(*)fromcourse))