上海大学数据库上机作业上机练习5作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上大学数据库上机作业
《数据库系统与应用》上机习题*************************************************************************************************
第五部分、SQL高级应用
一、做书上第十章的例题
二、利用上次上机的学生_课程数据库
1. 求选修了高等数学的学生学号和姓名。
USE学生课程
SELECT学生.学号,姓名,选课.课程号
FROM学生,选课,课程
WHERE学生.学号=选课.学号AND课程.课程号=选课.课程号AND课程名='高等数学'
2.求C1课程的成绩高于张三的学生学号和成绩。
USE学生课程
SELECT x.学号,x.成绩
FROM选课x,选课y
WHERE x.课程号='C1'AND x.成绩>y.成绩AND y.学号='S4'AND y.课程号='C1'
ORDER BY x.学号DESC
第二种:
USE学生课程
SELECT学号,成绩
FROM选课
WHERE课程号='C1'AND成绩>(SELECT成绩FROM选课,学生WHERE课程号='C1'
AND姓名='张三'AND选课.学号=学生.学号)
3.求其他系中比自动化学院某一学生年龄小的学生。
USE学生课程
SELECT学号,姓名,年龄,单位
FROM学生
WHERE年龄<(SELECT MAX(年龄)FROM学生
WHERE单位='自动化学院')AND单位!='自动化学院'
ORDER BY学号DESC
4.求其他系中比自动化学院学生年龄都小的学生。
USE学生课程
SELECT学号,姓名,年龄,单位
FROM学生
WHERE年龄<(SELECT MIN(年龄)FROM学生
WHERE单位='自动化学院')AND单位!='自动化学院'
ORDER BY学号DESC
5.求选修了C2课程的学生的姓名。
USE学生课程
SELECT姓名
FROM学生,选课
WHERE学生.学号=选课.学号AND课程号='C2'
6.求没有选修C2课程的学生的姓名。
USE学生课程
SELECT DISTINCT姓名
FROM学生,选课
WHERE学生.学号=选课.学号AND姓名not in(SELECT姓名
FROM学生,选课WHERE学生.学号=选课.学号AND选课.课程号='C2')
7.查询选修了C1、C2、C3、C7全部四门课程的学生的姓名。
USE学生课程
SELECT姓名
FROM学生
WHERE学号in(SELECT学号FROM选课WHERE课程号='C1')
AND学号in(SELECT学号FROM选课WHERE课程号='C2')
AND学号in(SELECT学号FROM选课WHERE课程号='C3')
AND学号in(SELECT学号FROM选课WHERE课程号='C7')
第二种:
USE学生课程
SELECT姓名
FROM学生,选课
WHERE学生.学号=选课.学号AND课程号in('C1','C2','C3','C7')
GROUP BY姓名
HA VING COUNT(*)=4
8.求至少选修了学号为S2的学生所选修的全部课程的学生的学号和姓名。USE学生课程
SELECT学生.学号,姓名
FROM学生,选课
WHERE学生.学号=选课.学号AND选课.课程号
in(SELECT课程号FROM选课WHERE学号='S2')
AND选课.学号!='S2'
GROUP BY学生.学号,姓名
HA VING COUNT(选课.学号)
>=(SELECT COUNT(*)FROM选课WHERE学号='S2')
9.选修了C1课程,同时也选修C2课程的学生学号。
USE学生课程
SELECT学号
FROM选课
WHERE课程号='C1'AND学号in(SELECT学号FROM选课WHERE课程号='C2') 10.求学生总人数。
USE学生课程
SELECT COUNT(学号)AS总人数
FROM学生
11.求课程和选修该课程的人数。
USE学生课程
SELECT选课.课程号,课程名,COUNT(学号)AS选修该课程人数
FROM选课,课程
WHERE选课.课程号=课程.课程号
GROUP BY选课.课程号,课程名
12.求选修课超过3门的学生学号。
USE学生课程
SELECT学号,COUNT(课程号)AS选课数
FROM选课
GROUP BY学号
HA VING COUNT(课程号)>3
13.编写一个程序,计算各学院的总人数及男女生的人数,生成下图的查询。
USE学生课程
SELECT单位,COUNT(*)AS总人数,
SUM(CASE性别WHEN'男'THEN 1 ELSE 0 END)AS男生人数,
SUM(CASE性别WHEN'女'THEN 1 ELSE 0 END)AS女生人数
FROM学生
GROUP BY单位