9299.net
大学生考试网 让学习变简单
当前位置:首页 >> 农学 >>

SQL实验答案(实验二、三)

SQL实验答案(实验二、三)


实验二答案
单表查询

本次实验用到的数据库
? ?

?
?

学生选课数据库,表结构如下 学生表:Student(Sno,Sname,Ssex,Sage, Sdept) 课程表:Course(Cno,Cname,Ccredit) 学生选课表:SC(Sno,Cno,Grade)

(1)查询全体学生的学号、姓名、性别、家 庭住址。 SELECT Sno,Sname, Ssex, Saddress FROM Student; (2)查询学生表中的全部信息 SELECT * FROM Student; (3)查询地理信息系统、测绘专业学生的姓 名、性别和家庭住址 SELECT Sdept,Sname,Ssex,Saddress FROM student where Sdept=‘地理信息系统 ‘ or Sdept=‘测绘工程‘ ;

(4)查询所有姓李学生的姓名、学号和性 别。 SELECT Sname,Sno,Ssex FROM Student WHERE rtrim(Sname) LIKE ‘李%'; (5)查询姓“刘”且全名为三个汉字的学生 的姓名。 SELECT Sname FROM Student WHERE rtrim(Sname) LIKE ‘刘_ _'; rtrim()作用是去掉结尾的空格,因为Sname会 在后面生成空格
?

(6)查询姓刘最后一个字为阳的学生的姓名。 SELECT Sname FROM Student WHERE rtrim(Sname) LIKE ‘刘%阳'; (7)查询所有不姓刘的学生姓名。 SELECT Sname FROM Student WHERE rtrim(Sname) NOT LIKE '刘%'; (8)查询所有以"VB_"开头,且倒数第2个字符为 o 的课程的详细情况。(VB_Develop) SELECT * FROM Course WHERE rtrim(Cname) LIKE ‘VB\_%o_' ESCAPE '\';

(9)查询年龄不在20~23岁之间的学生姓名、 系和出生年。(结果不包括20和23岁) SELECT Sname,Sdept,Sage,2011-sage FROM Student WHERE Sage not between 20 AND 23; (10)查询学号在2008011~2008015之间的学 生姓名。 SELECT Sname FROM Student WHERE Sno between 2008011 AND 2008015

(11)某些学生选修课程后没有参加考试,所以有 选课记录,但没有考试成绩。查询缺少成绩的学 生的学号和相应的课程号。 select Sno,Cno from Sc where Grade is null; (12)查询选修了003号课程的学生的学号及其成绩, 查询结果按分数降序排列,没有成绩的同学不出 现在结果中。 SELECT Sno,Grade FROM Sc WHERE Cno=‘003‘ and Grade is not null ORDER BY Grade DESC;

(13)查询学生表中的全部信息,查询结果 按系升序排列,同一系中的学生按学号降 序排列。 SELECT * FROM Student ORDER BY Sdept, Sno DESC; (14)查询学生总人数。 SELECT COUNT(*) FROM Student; (15)查询选修了课程的学生人数。 SELECT COUNT(DISTINCT Sno) FROM Sc;

(16)计算003号课程的学生平均成绩。 SELECT AVG(Grade) FROM Sc WHERE Cno=‘003’; (17)查询既选修了002号课程又选修了004号课程的学生学 号和课程号 SELECT Sno,Cno FROM sc WHERE Sno in ( SELECT Sno FROM sc WHERE Cno=‘002' AND Sno IN (SELECT Sno FROM sc WHERE Cno=‘004')) and Cno in(‘002’,’004’);

(18)查询选修了2门以上课程的学生学号。 SELECT Sno FROM Sc GROUP BY Sno HAVING COUNT(*)>2; (19)查询选修了002号课程且成绩不及格的 学生的学号 select Sno from Sc where Cno='002'and Grade<60;

(20)查询地理信息系统专业、姓李的、名 字为三个字的男生基本信息。 select * from Student where Sdept=‘地理信息系统’ and rtrim(Sname) like ‘李_ _’ and Ssex=‘男';

实验三答案
连接查询和嵌套查询

本次实验用到的数据库
? ? ?

?
?

学生选课数据库,表结构如下 student(学号,姓名,性别,年龄,班级) teacher(教师号,姓名,性别,年龄,级别,专业) course(课程号,课程名,教师号) sc(学号,课程号,成绩)

1.查询选修课程‘3-105’且成绩在60到80之间 (包括60和80)的所有学生记录。(不要重复 的列) select student.* ,sc.成绩,course.课程名,course. 课程号,course.教师号 from sc,student,course where sc.学号=student.学号 and sc.课程号 =course.课程号 and sc.课程号='3-105' and 成绩 between 60 and 80;

2.查询成绩为85、86或88的学生所有记录。 (不要重复的列) select student.* ,sc.成绩,course.课程名,course. 课程号,course.教师号 from sc,student,course where sc.学号=student.学号 and sc.课程号 =course.课程号 and 成绩 in('85','86','88');

3.查询‘95031’班的学生人数。(列名为“学生人 数”) select count(*) 学生人数 from student where 班级='95031'; 4.查询选修成绩最低分大于70,且最高分小于90的学 生的学号。(显示学号、最低分、最高分三个列 名) select 学号,min(成绩) 最低分,max(成绩) 最高分 from sc group by 学号 having min(成绩)>70 and max(成绩)<90; having 成绩 between 69 and 89;错误

5.查询至少有5名学生选修并以3开头的课程 的课程号、平均成绩、选课人数。 select 课程号,avg(成绩) 平均成绩,count(*) 选 课人数 from sc where 课程号 like '3%' group by 课程号 having count(*)>=5;
?

6.查询平均分大于80分的学生的学号、平均成绩。 select 学号,avg(成绩) 平均成绩 from sc group by 学号 having avg(成绩)>80; 7.查询‘95033’班每个学生所选课程的平均分,学号。(使用 两种做法——嵌套查询和连接查询) select 学号,avg(成绩) 平均成绩 from sc where 学号 in (select 学号 from student where 班级 = '95033') group by 学号;
?

select sc.学号,avg(成绩) 平均成绩 from sc,student where sc.学号=student.学号 and 班级 = '95033' group by sc.学号;

8.以选修 ‘3-105’为例,查询成绩高于‘109’ 号同学的所有同学的学生表所有记录。 (此题必须使用嵌套查询,层层深入) select * from student where 学号 in (select 学号 from sc where 课程号='3-105' and 成绩 > (select 成绩 from sc where 学号='109' and 课程号='3-105'));
?

9.查询与学号为‘108’的同学同岁的所有学 生的学号、姓名和年龄。(此题要使用两 种方法解答——嵌套查询和自身连接查询) select x.学号,x.姓名,x.年龄 from student x,student y where x.年龄=y.年龄 and y.学号='108'
?

select 学号,姓名,年龄 from student where 年龄 in (select 年龄 from student where 学号='108');

10.查询选修其课程的学生人数多于5人的教 师姓名。 select 姓名 as 教师姓名 from teacher where 教师号 in (select 教师号 from course where 课程号 in (select 课程号 from sc group by 课程号 having count(*) > 5));
?

11.查询选修‘3-105’课程的成绩比‘3-105’课程的 平均成绩低的学生的学号、课程号、成绩。 select * from sc where 成绩 < (select avg(成绩) from sc where 课程号 ='3-105') and 课程号='3-105'; ? 12.列出至少有2名男生的班级号。 select 班级 as 班号 from student where 性别='男' group by 班级 having count(*) >= 2;
?

13.查询每门课最高分的学生的学号、课程 号、成绩。 (假定成绩不重复) select * from sc where 成绩 in (select max(成绩) from sc group by 课程号);
?

select b.学号,a.课程号,a.成绩 from (select max(成绩) 成绩,课程号 from sc group by 课程号) as a,sc as b where a.课程号=b.课程号 and a.成绩=b.成绩

?

SELECT t1.学号,t1.课程号, 成绩 FROM SC t1 WHERE 成绩 IN (SELECT TOP 1 成绩 FROM SC WHERE t1.学号= 学号 ORDER BY score DESC ) ORDER BY t1.学号;

14.查询与'李军'同性别并同班的同学名字。 select 姓名 from student where 性别=(select 性别 from student where 姓名=' 李军') and 班级=(select 班级 from student where 姓名='李军 '); ? 15.查询选修‘计算机导论’课程的‘男’同学的 成绩表。 select * from sc where 课程号=(select 课程号 from course where 课 程名='计算机导论') and 学号 in (select 学号 from student where 性别=' 男');
?


推荐相关:
网站首页 | 网站地图
All rights reserved Powered by 大学生考试网 9299.net
文档资料库内容来自网络,如有侵犯请联系客服。zhit325@qq.com