《数据库原理与应用》实验题目及答案

--[3_8] 某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。 --查询缺少成绩的学生的学号和相应的课程号。

SELECT sno,cno FROM sc WHERE grade IS NULL;

运行结果:

sno cno --------- ----

--[3_9] 查询计算机系年龄在20岁以下的学生姓名。

SELECT sname FROM student

WHERE sdept='cs' AND sage<20;

运行结果:

sname -------- 刘晨

--[3_10] 查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。

SELECT sno,grade FROM sc WHERE cno='3' ORDER BY grade DESC;

运行结果:

sno grade

--------- --------------------------------------- 201313101 88.0 201313102 50.0

--[3_11] 查询全体学生情况,查询结果按所在系升序排列,同一系中的学生按性别降序排列。

SELECT * FROM student

ORDER BY sdept,sage DESC;

运行结果:

sno sname ssex sage sdept --------- -------- ---- ------ --------------------

201313101 李勇 男 20 CS 201313102 刘晨 女 19 CS 201313104 张立 男 19 IS 201313103 王敏 女 18 MA

--使用集函数

--[3_12] 查询学生总人数。

SELECT COUNT(*) 学生总人数 FROM student;

运行结果:

6

学生总人数 ----------- 4

--[3_13] 查询选修了课程的学生人数。

SELECT COUNT(DISTINCT sno) 选课人数 --注:用DISTINCT以避免重复计算学生人数 FROM sc;

运行结果:

选课人数 ----------- 2

--[3_14] 计算1号课程的最高、最低及平均成绩。

SELECT MAX(grade) '1号课程最高分', MAX(grade) '1号课程最低分', AVG(grade) '1号课程平均成绩' FROM sc WHERE cno='1'

运行结果:

1号课程最高分 1号课程最低分 1号课程平均成绩 --------------------------------------- --------------------------------------- --------------------------------------- 92.0 92.0 92.000000

--[3_15] 查询学生201313101选修课程的平均成绩。

运行结果:

学生平均成绩

--------------------------------------- 71.666666

--[3_16] 查询学生201313102选修课程的总学分数。

SELECT SUM(ccredit) 学生学分 FROM sc,course

WHERE sc.cno=course.cno AND sno='201313102';

运行结果:

学生学分 ------------- 6

--使用GROUP BY子句分组

--[3_17] 求各个课程号及相应的选课人数。

SELECT cno 课程号,COUNT(sno) 选课人数 FROM sc GROUP BY cno;

运行结果:

课程号 选课人数 ---- ----------- 1 1

7

2 2 3 2

--使用HAVING短语筛选最终分组结果

--[3_18] 查询选修了3门以上课程的学生学号。

SELECT sno FROM sc GROUP BY sno

HAVING COUNT(*)>=3

运行结果:

sno --------- 201313101

--[3_19] 查询有2门以上课程是90分以上的学生的学号及(90分以上的)课程数SELECT sno 学号,COUNT(*) '90分以上的课程数' FROM sc WHERE grade>=90

GROUP BY sno HAVING COUNT(*)>=2

运行结果:

学号 90分以上的课程数 --------- -----------

2. 连接查询 --自然连接

--[3_20] 查询每个学生及其选修课程的情况。

SELECT sname,cno,grade FROM student,sc

WHERE student.sno = sc.sno

运行结果:

sname cno grade

-------- ---- --------------------------------------- 李勇 1 92.0 李勇 2 35.0 李勇 3 88.0 刘晨 2 90.0 刘晨 3 50.0

--左外连接

--[3_21] 查询每个学生及其选修课程的情况(包括没有选修课程的学生)。

SELECT student.sno,sname,cno,grade

FROM student LEFT JOIN sc ON student.sno = sc.sno

运行结果:

sno sname cno grade

--------- -------- ---- ---------------------------------------

8

201313101 李勇 1 92.0 201313101 李勇 2 35.0 201313101 李勇 3 88.0 201313102 刘晨 2 90.0 201313102 刘晨 3 50.0 201313103 王敏 NULL NULL 201313104 张立 NULL NULL

--自身连接: 一个表与其自己进行连接,称为表的自身连接 --[3_22] 查询每一门课的间接先修课(即先修课的先修课)

SELECT FIRST.cno 课号,SECOND.cpno 间接先修课 FROM course FIRST,course SECOND WHERE FIRST.cpno = SECOND.cno

运行结果:

课号 间接先修课 ---- ----- 1 7 3 5 4 NULL 5 6 7 NULL

--复合条件连接

--[3_23] 查询选修2号课程且成绩在90分以上的所有学生的学号、姓名。SELECT student.sno, sname FROM student,sc WHERE student.sno = sc.sno AND sc.cno='2' AND sc.grade >=90

运行结果:

sno sname --------- -------- 201313102 刘晨

--多表连接

--[3_24] 查询每个学生的学号、姓名、选修的课程名及成绩。

SELECT student.sno,sname,cname,grade FROM student,sc,course

WHERE student.sno = sc.sno and sc.cno = course.cno

运行结果:

sno sname cname grade

--------- -------- ---------------- --------------------------------------- 201313101 李勇 数据库 92.0 201313101 李勇 数学 35.0 201313101 李勇 信息系统 88.0 201313102 刘晨 数学 90.0 201313102 刘晨 信息系统 50.0

3. 嵌套查询

9

--[3_25] 查询与“刘晨”在一个系学习的学生。

select sno,sname,sdept from student

where sdept in --当内查询结果最多只有一个值时可用=代替in (select sdept from student where sname='刘晨')

运行结果:

sno sname sdept --------- -------- --------------------

201313101 李勇 CS 201313102 刘晨 CS

--[3_26] 查询所有姓名相同的学生

select * from student where sname in (select sname from student

group by sname having count(*)>1) order by sname,sno

运行结果:

sno sname ssex sage sdept --------- -------- ---- ------ --------------------

--[3_27] 查询选修了课程名为“信息系统”的学生学号和姓名。

SELECT sno,sname --③最后在sudent关系中取出Sno和Sname FROM student WHERE sno IN

(SELECT sno --②然后在sc中找出选修了“信息系统”所在课号的学生学号 FROM sc WHERE cno IN

(SELECT cno --①首先在curse关系中找出“信息系统”的课程号 FROM course WHERE cname='信息系统'))

运行结果:

sno sname --------- -------- 201313101 李勇 201313102 刘晨

--[3_28] 找出每个学生超过他选修课程平均成绩的学号、课号及成绩。

SELECT x.* FROM sc x

WHERE grade>=(SELECT AVG(grade)

10

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4