当前位置:文档之家› 实验3数据库 数据查询

实验3数据库 数据查询

实验三数据查询一、实验目的关系数据库的查询语句是SQL语言中最灵活的部分,必须仔细体会,多多上机练习,才能真正体会和理解其中的奥妙和细微差别。

本实验的目的就是让同学们通过练习掌握常用的查询语句和查询技巧。

请同学们反复练习,即使做对了也要抽时间再一次细细体会。

二、实验预习1、SQL中查询语句格式:select[all|distinct]<目标列表达式>[```]fromwheregroup by<列名>[having<条件表达式>]order by<列名>[asc|desc]2、连接查询有哪些不同的连接方式?有什么特点。

等值于非等值连接查询:连接运算符为=号时为等值连接,使用其他运算符称为非等值连接自身连接:连接操作不仅可以在两个表之间进行,也可以在一个表与其自己进行连接外连接:把舍弃的元组也保存在结果关系中,其他属性上填空值复合条件连接:where中使用多个连接谓词三、实验内容和要求在实验二建立的数据库和数据表(Student、SC、Course)的基础上,用SQL语句完成下列查询,并在SQL SERVER中得以验证:1、查询全体学生的基本信息。

(请写出两种方法)select *from student;或select Sno,Sname,Saex,Sage,Sdeptfrom student;2、现需要一个“计算机系”的点名册,点名册上只要学号、姓名、性别三个方面的信息(记得给出别名,好让查询出来的结果容易识别哦)。

Select Sno 学号,Sname 姓名,Ssex 性别From student;3、查询“信息系”学生的学号、姓名和出生年份(起个别名,不然查询出来的结果会很难看,不信你试试看,是不是结果表一点规律都没有?)。

select sno 学号,sname 姓名,2013-Sage 出生年份from studentwhere sdept=’计算机’;4、查询1号课程不及格的学生学号。

查询结果按照考试成绩降序排列。

Select snoFrom scWhere cno=1 and grade<60Order by grade desc;5、查询考试有不及格现象的学生的学号。

Select snoFrom scWhere grade<60;6、查询一下尚有无考试成绩的学生的学号和相应的课程号。

Select sno,cnoFrom scWhere grade=null;7、查询一下哪些学号的学生,选修了课,但还没有参加考试。

Select snoFrom scWhere cno!=null and grade=null;8、将全体学生按年龄升序排序(两种写法)。

Select *From studentOrder by sage desc;或select Sno,Sname,Saex,Sage,Sdeptfrom studentorder by sage;9、将全体学生按照系别升序排序,在系名相同的情况下再按照年龄降序排列。

Select *From studentOrder by sdept,sage desc;10、查询年龄在20-23岁之间的学生的学号、姓名、性别、系别。

查询结果按照系别升序、年龄升序排列。

Select sno,sname,ssex,sdeptFrom studentWhere sage between 20 and 23Order by sdept,sage;11、查询“计算机系”姓“张”的学生的基本信息。

Select *From studentWhere sname like ‘张%’and sdept=’计算机’;12、给0905111班出一个学生点名册。

要求给出学号、姓名、性别几个方面的信息。

(查询结果照学号升序了吗?不然这点名册会有多么那看啊,你自己试试)。

select sno 学号,sname 姓名,ssex 性别from studentorder by sno;13、查询课程名中有“数据库“字样的课程的基本信息。

Select *From courseWhere cname like ‘数据库%’;14、查询选修过课程的学生总人数。

Select count(distinct sno)From sc;15、查询已经选修过课程的学生学号和姓名。

Select sname,sc.snoFrom student,scWhere student.sno=sc.sno;16、查询选修了“数据库原理“这门课程的学生学号、姓名、性别、考试成绩。

将结果按照成绩降序排列。

Select student.sno,sname,ssex,gradeFrom student,sc,courseWhere student.sno=sc.sno and cname='数据库原理' and o=oOrder by grade desc;17、查询0905111班学生的选课情况,要求输出选课人的学号、姓名、课程号、课程名、成绩。

将查询结果按照学号升序排序。

Select student.sno,sname,o,cname,gradeFrom student,course,scWhere student.sno=sc.sno and o=o and left(student.sno,7)=0905111;18、输出选修了“C5“号课程的的学生成绩单,要求输出学号,姓名,成绩。

查询结果按照班级升序、成绩降序排列。

Select student.sno,sname,gradeFrom student,scWhere student.sno=sc.sno and o=’C5’Order by left(student.sno,7),grade desc;19、查询每个学生的学号、对应的平均成绩。

Select student.sno,avg(grade)From student,scWhere student.sno=sc.snoGroup by student.sno;20、查询每个课程号及其对应的选课人数、考试最高分、最低分、平均分。

Select cno 学号,count(distinct sno) 选课人数,max(grade) 最高分,min(grade) 最低分,avg(grade) 平均分From scGroup by cno;21、查询每个学期及其对应的开课门数、总学分。

Select semester 学期,count(cno),sum(ccredit)From course;22、查询每个班的班级号及其对应的班级人数、平均年龄。

提示:可用函数left。

如函数LEFT(Sno,3)表示Sno列的左面数前3个字符串)select left(sno,7),count(sno),avg(sage)from studentgroup by left(sno,7);23、查询不及格门数超过3门的学生学号。

Select snoFrom scWhere grade<60Group by snoHaving count(*)>3;24、查询不及格门数超过3门的学生学号、姓名、性别(2种方法,1班的可在后面嵌套讲完再补第2种方法)。

方法一:Select student.sno,sname,ssexFrom student,scWhere grade<60 and student.sno=sc.snoGroup by student snoHaving count(*)>3;方法二:Select sno,sname,From studentWhere sno in( select snoFrom scGroup by snoWhere count(cno)>3);25、查询平均成绩在75分以上的学生的学号、姓名、所在系。

Select sno,sname,sdeptFrom studentWhere sno in(select snoFrom scGroup by snoWhere avg(grade)>75);26、只统计80分以上的选课情况,查询选修了3门以上的学生学号、选课门数。

Select sno,count(cno)From scWhere grade>80Group by snoHaving count(sno)>3);27、只统计0905111班的同学:查询每门课程的课程号、选修人数、平均成绩。

Select cno,count(sno),avg(grade)From scHaving left(sno,7)=’0905111’;28、只统计0905111班的同学:查询每门课程的课程号、课程名、学分、选修人数、平均成绩。

Select o,cname,ccredit,count(sno),avg(grade)From course left out join sc on (o=o)Group by cnoHaving left(sno,7)=’0905111’29、统计各门课程的成绩,要求输出课程代号,课程名,平均成绩,选修人数。

(成绩为空值的不统计)Select o,cname,avg(grade),count(sno)From sc,courseWhere grade is not null and o=oGroup by cno;30、统计各门课程的不及格人数,要求输出课程代号,课程名,不及格人数。

Select o,cname,count(sno)From sc,courseWhere grade<60 and o=oGroup by cno;31、查询还没有选过任何课程的学生学号、姓名、性别。

Select student.sno,sname,ssexFrom student,scWhere student.sno=sc.sno and cno is null;32、查询选修过1、2号课程的学生学号、姓名、性别。

Select sno,sname,ssexFrom studentWhere sno in(Select snoFrom scWhere cno=’1’ or cno=’2’));33、查询选修了“计算机导论”或“高等数学”课程的学生的学号、姓名。

Select sno,snameFrom studentWhere sno in(Select snoFrom scWhere cno in(Select cnoFrom courseWhere cno=’计算机导论’ 0r cno=’高等数学’)));34、查询既选修了“计算机导论”,又选修了“高等数学”的学生学号、姓名、性别。

相关主题