表数据以及题

CREATE DATABASE db1;
USE db1;-- 班级表
CREATE TABLE class (cid INT(11) NOT NULL AUTO_INCREMENT,caption VARCHAR(32) NOT NULL,PRIMARY KEY (cid)
);INSERT INTO class VALUES
(1, '三年二班'),
(2, '三年三班'),
(3, '一年二班'),
(4, '二年九班');-- 老师表
CREATE TABLE teacher(tid INT(11) NOT NULL AUTO_INCREMENT,tname VARCHAR(32) NOT NULL,PRIMARY KEY (tid)
);INSERT INTO teacher VALUES
(1, '刘正风老师'),
(2, '东方不败老师'),
(3, '风清扬老师'),
(4, '绿竹翁老师'),
(5, '令狐冲老师');-- 课程表
CREATE TABLE course(cid INT(11) NOT NULL AUTO_INCREMENT,cname VARCHAR(32) NOT NULL,teacher_id INT(11) NOT NULL,PRIMARY KEY (cid),CONSTRAINT fk_course_teacher FOREIGN KEY (teacher_id) REFERENCES teacher (tid)
) ;INSERT INTO course VALUES
(1, '生物', 1),
(2, '物理', 2),
(3, '体育', 3),
(4, '美术', 2);-- 学生表
CREATE TABLE student(sid INT(11) NOT NULL AUTO_INCREMENT,gender CHAR(1) NOT NULL,class_id INT(11) NOT NULL,sname VARCHAR(32) NOT NULL,PRIMARY KEY (sid),CONSTRAINT fk_class FOREIGN KEY (class_id) REFERENCES class (cid)
);
INSERT INTO student VALUES
(1, '男', 1, '理解'),
(2, '女', 1, '钢蛋'),
(3, '男', 1, '张三'),
(4, '男', 1, '张一'),
(5, '女', 1, '张二'),
(6, '男', 1, '张四'),
(7, '女', 2, '铁锤'),
(8, '男', 2, '李三'),
(9, '男', 2, '李一'),
(10, '女', 2, '李二'),
(11, '男', 2, '李四'),
(12, '女', 3, '如花'),
(13, '男', 3, '刘三'),
(14, '男', 3, '刘一'),
(15, '女', 3, '刘二'),
(16, '男', 3, '刘四');-- 选课表
CREATE TABLE score (sid INT(11) NOT NULL AUTO_INCREMENT,student_id INT(11) NOT NULL,course_id INT(11) NOT NULL,num INT(11) NOT NULL,PRIMARY KEY (sid),CONSTRAINT fk_score_course FOREIGN KEY (course_id) REFERENCES course (cid),CONSTRAINT fk_score_student FOREIGN KEY (student_id) REFERENCES student(sid)
);INSERT INTO score VALUES
(1, 1, 1, 10),
(2, 1, 2, 9),
(5, 1, 4, 66),
(6, 2, 1, 8),
(8, 2, 3, 68),
(9, 2, 4, 99),
(10, 3, 1, 77),
(11, 3, 2, 66),
(12, 3, 3, 87),
(13, 3, 4, 99),
(14, 4, 1, 79),
(15, 4, 2, 11),
(16, 4, 3, 67),
(17, 4, 4, 100),
(18, 5, 1, 79),
(19, 5, 2, 11),
(20, 5, 3, 67),
(21, 5, 4, 100),
(22, 6, 1, 9),
(23, 6, 2, 100),
(24, 6, 3, 67),
(25, 6, 4, 100),
(26, 7, 1, 9),
(27, 7, 2, 100),
(28, 7, 3, 67),
(29, 7, 4, 88),
(30, 8, 1, 9),
(31, 8, 2, 100),
(32, 8, 3, 67),
(33, 8, 4, 88),
(34, 9, 1, 91),
(35, 9, 2, 88),
(36, 9, 3, 67),
(37, 9, 4, 22),
(38, 10, 1, 90),
(39, 10, 2, 77),
(40, 10, 3, 43),
(41, 10, 4, 87),
(42, 11, 1, 90),
(43, 11, 2, 77),
(44, 11, 3, 43),
(45, 11, 4, 87),
(46, 12, 1, 90),
(47, 12, 2, 77),
(48, 12, 3, 43),
(49, 12, 4, 87),
(52, 13, 3, 87);-- 1、查询平均成绩大于八十分的同学的姓名和平均成绩
-- 2、查询所有学生的学号,姓名,选课数,总成绩(注意:对于那些没有选修任何课程的学生也算在内)
-- 3、查询没有报东方不败老师课的学生姓名
-- 4、查询挂科超过两门(包括两门)的学生姓名和班级
-- 5、查询选修了所有课程的学生姓名
-- 6、查询东方不败老师教的课程的所有成绩记录
-- 7、查询全部学生都选修了的课程号和课程名
-- 8、查询之选修了一门课程的学生姓名和学号
-- 9、查询平均成绩大于85的学生姓名和平均成绩
-- 10、查询生物成绩不及格的学生姓名和对应生物分数

答案

-- 1、查询平均成绩大于八十分的同学的姓名和平均成绩
SELECTstudent.sname '学生姓名',(sum(score.num)/(SELECT COUNT(course.cid) FROM course)) '平均成绩'
FROM-- 没参加考试的学生不考虑, 直接选择内连接score, student
WHERE-- 连接条件score.student_id = student.sid
GROUP BY-- 通过学生id分组score.student_id
HAVING-- 每个学生的平均分 (总分数 / 总课程科目数) 并大于 80(sum(score.num) / (SELECT COUNT(course.cid) FROM course)) >= 80-- 2、查询所有学生的学号,姓名,选课数,总成绩(注意:对于那些没有选修任何课程的学生也算在内)
SELECT-- 获取选课数与总成绩student.sid '学号',student.sname '姓名',IFNULL(COUNT(score.course_id),0) '选课数',IFNULL(SUM(score.num),0) '总分数'-- student.sid '学号',student.sname '姓名'
FROM-- 由于要所有学生, 所以我们使用外连接student
LEFT JOIN score ON score.student_id = student.sid
GROUP BYstudent.sid-- 3、查询没有报东方不败老师课的学生姓名
SELECT student.sname '学生姓名'
FROM student
WHERE
-- 使用排除法,获取没有报东方老师课的学生student.sid
NOT IN
-- 获取东方不败老师的所带科目
(SELECT score.student_id FROM teacher,course,score WHERE teacher.tname='东方不败老师' AND teacher.tid = course.teacher_id AND course.cid = score.course_id GROUP BY score.student_id)-- 4、查询挂科超过两门(包括两门)的学生姓名和班级
SELECTstudent.sname '学生姓名',class.caption '班级'
FROM student,class
WHERE-- 全部学生id排除掉合格学生的id, 然和进行和对应班级内连接student.sid NOT IN    (-- 考试合格的学生的id
SELECTnb.id
FROM-- 单个学生已合格数(SELECT score.student_id id,COUNT(score.student_id) count FROM score WHERE score.num > 60 GROUP BY score.student_id) nb
WHERE-- 总合格总数 - 已合格数 = 不合格数-- (不合格数>=2 代表本学生不合格, 不合格数 < 2 代表本学生合格)((SELECT COUNT(*) FROM course) - nb.count) < 2)
ANDstudent.class_id = class.cid-- 5、查询选修了所有课程的学生姓名
SELECTstudent.sname '姓名'
FROMscore,student
WHEREscore.student_id = student.sid
GROUP BYscore.student_id
HAVING-- 学生已选课程总数 = 课程总数COUNT(score.course_id) = (SELECT COUNT(*) FROM course)-- 6、查询东方不败老师教的课程的所有成绩记录
SELECTscore.*
FROMteacher,course,score
WHEREteacher.tname = '东方不败老师' AND course.teacher_id = teacher.tid AND course.cid = score.course_id-- 7、查询全部学生都选修了的课程号和课程名
SELECTcourse.cid '课程号', course.cname '课程名'
FROMscore,course
WHEREcourse.cid = score.course_id
GROUP BY    score.course_id
HAVING-- 查询被选科目的总数与全部学生比较,看看哪些课程被全部学生所选COUNT(score.course_id) = (SELECT COUNT(student.sid) FROM student)-- 8、查询之选修了一门课程的学生姓名和学号
SELECTstudent.sname '学生姓名',student.sid '学号'
FROMscore,student
WHEREscore.student_id = student.sid
GROUP BYscore.student_id
HAVINGCOUNT(score.course_id) = 1-- 9、查询平均成绩大于85的学生姓名和平均成绩
SELECTstudent.sname '学生姓名', (SUM(score.num) / (SELECT COUNT(course.cid) FROM course)) '平均成绩'
FROMscore, student
WHEREscore.student_id = student.sid
GROUP BYscore.student_id
HAVING-- 平均分 (总分数 / 课程科目数 ) 并大于 85(SUM(score.num) / (SELECT COUNT(course.cid) FROM course)) > 85-- 10、查询生物成绩不及格的学生姓名和对应生物分数
SELECTstudent.sname '不及格生物学生',IFNULL(score.num,0) '分数'
FROMstudent
LEFT JOINscore
ON-- 匹配分数表中的生物分数集 , 外连接到学生表上    score.course_id = (SELECT course.cid FROM course WHERE course.cname = '生物')  AND  student.sid = score.student_id
WHERE-- 查询分数不及格的学生, 以及没有参加考试的学生score.num NOT BETWEEN 60 AND 100 OR ISNULL(score.num)

SQL练习题(一) 附答案相关推荐

  1. 大学计算机基础知识素材PPT,大学计算机基础操作练习题「附答案」

    大学计算机基础操作练习题「附答案」 一.操作题 完成下面一个例子,就存一次盘, 避免操作失误损失. [例5.1]打开指定文件夹下的演示文稿yswg43.ppt,内容如下:(参见素材yswg43.ppt ...

  2. 我做的邹健老师的sql练习题(含答案)

    我做的邹健老师的sql练习题(含答案) --试题1.2(表的建立及原题请参考邹健老师的专栏:http://blog.csdn.net/zjcxc/) (注:邹健老师的专栏有部分答案有问题) SELEC ...

  3. 办公软件测试题目,2017年Office办公软件考试练习题「附答案」

    2017年Office办公软件考试练习题「附答案」 一.选择题 1. 新建的一个工作簿默认包含( B )张工作表. A. 1张 B. 3张 C. 10张 D. 弹出窗口询问设置 2. Excel 20 ...

  4. 2017计算机应用基础统考,计算机应用基础统考练习题「附答案」

    下面小编为大家分享的是计算机应用基础统考的练习题及答案,希望对大家备考计算机应用基础统考考试有帮助! 单选题 1.电子计算机按使用范围分类,可以分为______. A:巨型计算机.大中型机.小型计算机 ...

  5. 数据分析师 Mysql练习题(附答案)

    Mysql练习(附答案) 练习一 分组.过滤.连接 练习二 增改表字段.改数据.计算 练习三 IF条件过滤 练习四 纵向连接,日期函数,子查询 练习五 时间函数,子查询,多条件查询 知识扩展 练习一 ...

  6. python考试题目及答案-这就是你需要的python99道练习题(附答案)

    Python是一种跨平台的计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的.大型项目的开发. 想要学 ...

  7. 史上最难oracle数据库练习题(附答案)

    oracle数据库练习题,所有练习数据都来自于安装oracle数据库后,自带的那几张表,EMP,DEPT等. 部分题目答案已给出,若有异议可以私聊一起探讨. 第一题: 统计薪资大于  薪资最高的员工所 ...

  8. 圆与圆的位置关系题目含答案_圆与圆的位置关系课时练习题(附答案)

    由莲山课件提供http://www.5ykj.com/ 资源全部免费温馨提示: 此套题为Word版,请按住Ctrl,滑动鼠标滚轴,调节合适的观看比例,答案解析附后.关闭Word文档返回原板块.课时提 ...

  9. C++练习题(附答案)

    一些关于C++的练习题 之前在学校的一些练习题~ 大家可以做一下~ (有错误答案的话评论区@我 三克油) 选择 一.选择题 1.求"ab c \ \ 12\n"字符串的长度( C ...

  10. 计算机绘图cad期末考试试题,2017大学cad期末考试练习题「附答案」

    [www.hywsbj.com--三会一课] 一.选择题 1.如果创建一个选择集,使选框所圈住及 所接触的图形选中,应采用 A.使用一个窗口选择 B.交叉 选择 C.在命令行输入CA D.按 shif ...

最新文章

  1. linux之权限和chmod、chown命令
  2. 地脚螺钉直径系列_百科:螺栓、螺钉、螺丝三个概念,别再傻傻分不清!
  3. Angular 7 版本
  4. js密码强度正则表达式_这20个正则表达式,能让你少写100行代码
  5. js 中 setInterval 的返回值问题
  6. svn增量打包部署_持续集成、持续交付、持续部署(CI/CD)简介
  7. 通过Spring集成从Hibernate 3迁移到4
  8. JS prototype作用
  9. Does Oracle Goldengate support Parallel DML?
  10. 关于arguments,caller以及匿名函数调用的问题
  11. php smarty ci,CI整合Smarty,cismarty_PHP教程
  12. matplotlib可视化学习笔记
  13. 数据结构算法题整理2
  14. 上课笔记-机器学习(5)-美国人口普查数据进行收入预测分类
  15. 开博第一篇,为什么要开通博客,开通博客的申请理由
  16. 密码疑云 (3)——详解RSA的加密与解密
  17. 腾讯精选50题—Day6题目43,46,53
  18. matlab画图窗口显示中文乱码,全是方框的解决方法
  19. word读入富文本编辑器,编辑后导出下载word日常总结
  20. 利用Redis原子计数器incr实现计数器及接口限流

热门文章

  1. u盘中毒文件为html文档,U盘u盘中毒,文件被隐藏了怎么办 – 手机爱问
  2. 马哲概述 如何理解商品的使用价值与价值以及货币,纸币
  3. android8.0内置壁纸,一加手机8pro内置壁纸分享
  4. uni H5 苹果手机调微信支付失败
  5. [vijos 1770]大内密探
  6. LaTex技巧:用PPT画图,然后导入LaTeX
  7. 基于MATLAB/Simulink的Buck变换器仿真模型,包含开环控制和闭环控制两种控制
  8. 各种生物识别的优缺点
  9. STP BPDU报文
  10. 2016年如何用正确的姿势抢“头条”?