此笔记为听柠檬班公开课后笔记,特为其打call,如有侵权,请随时联系我删帖哦~

课堂习题及课后题

建表语句

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for course
-- ----------------------------
DROP TABLE IF EXISTS `course`;
CREATE TABLE `course`  (`Cno` int(11) NOT NULL COMMENT '课程编号',`Cname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '课程名称',`Tno` int(11) NULL DEFAULT NULL COMMENT '老师编号',PRIMARY KEY (`Cno`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;-- ----------------------------
-- Records of course
-- ----------------------------
INSERT INTO `course` VALUES (1, '数学', 1);
INSERT INTO `course` VALUES (2, '语文', 2);
INSERT INTO `course` VALUES (3, '英文', 1);-- ----------------------------
-- Table structure for sc
-- ----------------------------
DROP TABLE IF EXISTS `sc`;
CREATE TABLE `sc`  (`Sno` int(11) NOT NULL COMMENT '学号',`Cno` int(11) NOT NULL COMMENT '课程编号',`score` int(255) NULL DEFAULT NULL COMMENT '分数',PRIMARY KEY (`Sno`, `Cno`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;-- ----------------------------
-- Records of sc
-- ----------------------------
INSERT INTO `sc` VALUES (1, 1, 99);
INSERT INTO `sc` VALUES (1, 2, 80);
INSERT INTO `sc` VALUES (1, 3, 50);
INSERT INTO `sc` VALUES (2, 1, 70);
INSERT INTO `sc` VALUES (2, 2, 90);
INSERT INTO `sc` VALUES (3, 1, 90);
INSERT INTO `sc` VALUES (4, 1, 60);
INSERT INTO `sc` VALUES (4, 2, 50);
INSERT INTO `sc` VALUES (4, 3, 40);-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`  (`Sno` int(255) NOT NULL COMMENT '学号',`Sname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',`Sage` int(255) NULL DEFAULT NULL COMMENT '年龄',`Ssex` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '性别',PRIMARY KEY (`Sno`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (1, '张三丰', 108, '男');
INSERT INTO `student` VALUES (2, '李小龙', 20, '男');
INSERT INTO `student` VALUES (3, '小龙女', 17, '女');
INSERT INTO `student` VALUES (4, '白发魔女', 18, '女');
INSERT INTO `student` VALUES (5, '韦小宝', 19, '男');-- ----------------------------
-- Table structure for teacher
-- ----------------------------
DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher`  (`Tno` int(11) NOT NULL COMMENT '老师编号',`Tname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '老师名称',PRIMARY KEY (`Tno`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;-- ----------------------------
-- Records of teacher
-- ----------------------------
INSERT INTO `teacher` VALUES (1, '无崖子');
INSERT INTO `teacher` VALUES (2, '孤独求败');
INSERT INTO `teacher` VALUES (3, '洪七公');SET FOREIGN_KEY_CHECKS = 1;

课后题

1 查询年龄小于18岁的学员信息
2 查询无崖子授课信息
3 查询没有参与任意课程的学生信息
4 查询无崖子每个授课课程的学员人数
5 查询张三丰数学成绩
6 查询出语文最高分
7 查询没有参与语文考试的学生信息
8 查询语数外三门成绩的平均分
9 查询报名孤独求败老师课程的学生信息
10 没有报名孤独求败老师课程的学生信息

解答及思路

#1 查询年龄小于18岁的学员信息
SELECT * FROM student WHERE student.sage < 18;#2 查询无崖子授课信息
SELECT * FROM teacher AS tr
INNER JOIN course AS ce ON tr.Tno = ce.Tno
WHERE tr.Tname = '无崖子';
#也可如下,结果无其他不需要的信息
SELECT tr.Tname, ce.Cname FROM teacher AS tr
INNER JOIN course AS ce ON tr.Tno = ce.Tno
WHERE tr.Tname = '无崖子';#3 查询没有参与任意课程的学生信息
SELECT * FROM student AS st
LEFT JOIN sc ON st.Sno = sc.Sno
WHERE sc.Sno IS NULL;#有想过用sc.score,但是觉得没sc.Sno好,这是唯一索引,不容易出错
#思路:学生表和课程表没有关联关系;没有成绩可以认为没有参加课程,所以聚焦在学生表和成绩表#4 查询无崖子每个授课课程的学员人数
SELECT tr.Tname, ce.Cname, COUNT(*) FROM teacher AS tr
LEFT JOIN course AS ce ON tr.Tno = ce.Tno
LEFT JOIN sc on ce.Cno = sc.Cno
WHERE tr.Tname = '无崖子'
GROUP BY ce.Cno;
#如下是老师的答案
select c.Cno,c.Cname,count(*) from teacher d
INNER JOIN course c on d.Tno = c.Tno
INNER JOIN sc b on b.Cno = c.Cno
where d.TName = '无崖子'
GROUP BY c.Cno,c.Cname;#5 查询张三丰数学成绩
SELECT st.Sname, ce.Cname, sc.score FROM student AS st
INNER JOIN sc on st.Sno = sc.Sno
INNER JOIN course AS ce on sc.Cno = ce.Cno
WHERE st.Sname = '张三丰' AND ce.Cname = '数学';
#LEFT JOIN也OK#6 查询出语文最高分
SELECT ce.Cname, sc.score FROM course AS ce
INNER JOIN sc ON ce.Cno = sc.Cno
WHERE ce.Cname = '语文'
ORDER BY sc.score DESC LIMIT 1;
#LEFT JOIN也OK
SELECT ce.Cname, sc.score FROM course AS ce
LEFT JOIN sc ON ce.Cno = sc.Cno
WHERE ce.Cname = '语文'
ORDER BY sc.score DESC LIMIT 1;
#ASC升序,由小到大;DESC降序,由大到小;
#可以用MAX()
SELECT ce.Cname, MAX(sc.score) AS max_score FROM course AS ce
INNER JOIN sc ON ce.Cno = sc.Cno AND ce.Cname = '语文' #用 INNER JOIN更合适,LEFT JOIN会查出无用信息
GROUP BY ce.Cname #7 查询没有参与语文考试的学生信息
SELECT * FROM student AS st
LEFT JOIN sc ON st.Sno = sc.Sno
LEFT JOIN course AS ce ON sc.Cno = ce.Cno
WHERE ce.Cname = '语文' AND sc.Sno IS NULLSELECT st.Sname, se.Cname, se.Sno FROM student AS st
LEFT JOIN
(SELECT ce.Cname, sc.Sno, sc.score FROM course AS ceLEFT JOIN sc ON sc.Cno = ce.Cno AND ce.Cname = '语文') AS se #先查语文课程的所有成绩
ON st.Sno = se.Sno #再查每一个学生对应的语文成绩
WHERE se.Sno IS NULL #当这个学生没有语文成绩,就意味着他没考试;Sno为唯一索引,所以可以当该索引为空时;
#老师答案如下,思路一致,用了右连接:
select * from course c
INNER JOIN sc b on c.Cno = b.Cno and c.Cname = '语文'
RIGHT JOIN Student a on a.Sno = b.Sno
where b.Sno is null;
# 和学生做外连接#8 查询语数外三门成绩的平均分
SELECT ce.Cname, AVG(sc.score) AS avg_score FROM course AS ce
LEFT JOIN sc ON ce.Cno = sc.Cno
GROUP BY ce.Cname#9 查询报名孤独求败老师课程的学生信息
SELECT * FROM teacher AS tr #用*,尤其连了四表,会出现很多重复字段,所以查询时可以写好要显示哪些字段,如下段
INNER JOIN course AS ce ON tr.Tno = ce.Tno AND tr.Tname = '孤独求败' #此处用左连接会显示所有老师,除非最后加上where老师名字是孤独求败
LEFT JOIN sc on ce.Cno = sc.Cno
LEFT JOIN student AS st ON sc.Sno = st.Sno
#接第一行:
SELECT tr.Tname, ce.Cname, st.Sname FROM teacher AS tr
INNER JOIN course AS ce ON tr.Tno = ce.Tno AND tr.Tname = '孤独求败'
LEFT JOIN sc on ce.Cno = sc.Cno
LEFT JOIN student AS st ON sc.Sno = st.Sno#10 没有报名孤独求败老师课程的学生信息
#思路:同没有参加语文考试的学生题思路一致;
#先查询孤独求败老师的所有课程信息,再和学生做外连,看哪个学生没有课程信息就是没参加孤独求败老师的课程
#只有成绩表和学生表有Sno关联,所以要和学生表关联先得关联成绩表
SELECT tr.Tname, ce.Cname, st.Sname FROM teacher AS tr
INNER JOIN course AS ce ON tr.Tno = ce.Tno AND tr.Tname = '孤独求败'
INNER JOIN sc ON ce.Cno = sc.Cno
RIGHT JOIN student AS st ON sc.Sno = st.Sno
WHERE sc.Sno IS NULL
心得不写,下次忘了,我就再敲一遍,哈哈哈哈哈哈哈哈

【MySQL】听柠檬班公开课后,学习笔记及作业(二)相关推荐

  1. 【MySQL】听柠檬班公开课后,学习笔记及作业(一)

    此笔记为听柠檬班公开课后笔记,特为其打call,如有侵权,请随时联系我删帖哦 一.课堂笔记 交叉连接 结果为笛卡尔积(两表条数相乘),两种写法,分别如下: select * from table1, ...

  2. mysql入门很简单系列视频-学习笔记

    mysql入门很简单系列视频-学习笔记 视频链接:mysql入门很简单系列视频 https://www.bilibili.com/video/av14920200/ 以前主要就了解DDL.DML.DC ...

  3. 阿里云“7天实践训练营”入门班第二期学习笔记 第五天 在线编程挑战

    阿里云"7天实践训练营"入门班第二期学习笔记 第五天 在线编程挑战 吾辈,完全不会编程 以下内容全程来自阿里云社区的大佬分析讲解 原题目 知识点:搜索.字符串.位运算 有一天Jer ...

  4. tensorflow学习笔记(三十二):conv2d_transpose (解卷积)

    tensorflow学习笔记(三十二):conv2d_transpose ("解卷积") deconv解卷积,实际是叫做conv_transpose, conv_transpose ...

  5. BizTalk学习笔记系列之二:实例说明如何使用BizTalk

    BizTalk学习笔记系列之二:实例说明如何使用BizTalk --.BizTalk学习笔记系列之二<?XML:NAMESPACE PREFIX = O /> Aaron.Gao,2006 ...

  6. Windows保护模式学习笔记(十二)—— 控制寄存器

    Windows保护模式学习笔记(十二)-- 控制寄存器 控制寄存器 Cr0寄存器 Cr2寄存器 Cr4寄存器 控制寄存器 描述: 控制寄存器有五个,分别是:Cr0 Cr1 Cr2 Cr3 Cr4 Cr ...

  7. 汇编入门学习笔记 (十二)—— int指令、port

    疯狂的暑假学习之  汇编入门学习笔记 (十二)--  int指令.port 參考: <汇编语言> 王爽 第13.14章 一.int指令 1. int指令引发的中断 int n指令,相当于引 ...

  8. OpenCV学习笔记(十二):边缘检测:Canny(),Sobel(),Laplace(),Scharr滤波器

    OpenCV学习笔记(十二):边缘检测:Canny(),Sobel(),Laplace(),Scharr滤波器 1)滤波:边缘检测的算法主要是基于图像强度的一阶和二阶导数,但导数通常对噪声很敏感,因此 ...

  9. QT学习笔记(十二):透明窗体设置

    QT学习笔记(十二):透明窗体设置 创建 My_Widget 类 基类为QWidget , My_Widget.cpp 源文件中添加代码 #include "widget.h" # ...

最新文章

  1. AI时代,企业如何利用机器学习技术驱动业务发展?
  2. #164 (Div. 2)
  3. 减少亚稳态导致错误,提高系统的MTBF
  4. 日积月累:ProguardGui进行jar包代码混淆
  5. Java 基础之 static 静态
  6. Windows编程---------MessageBox
  7. centos netstat和ps感染木马解决方案
  8. 只需这10步,通过历史控制文件恢复数据库
  9. 商业计划书,有什么idea,模板帮你来
  10. python生成姓名,python生成随机姓名
  11. linux ext3 fsck一定要慎用
  12. python mpi_MPI Python环境搭建
  13. 5.stm32L476在freeRTOS下使用低功耗
  14. 【总结整理】高德LBS开放平台学习
  15. 福州师范大学计算机专业导师简介,黄欣沂_福建师范大学研究生导师信息
  16. 阿里P9:做了6年架构设计,这次聊聊微服务与分布式事务细节
  17. 十七、主餐 《西敏小要理问答》
  18. python 生成q版头像_在python中生成花式头像的最简单方法
  19. 使用进销存财务软件有哪些好处?进销存财务软件该如何选?
  20. Linux 命令(221)—— poweroff 命令

热门文章

  1. 2022茶艺师(初级)操作证考试题库及在线模拟考试
  2. 序列周期性与魔术(一)——数学里的函数周期性
  3. 数学基础_若要使骰子(六个面)的每个数都出现至少一次,那么平均需要掷多少次骰子?
  4. rm -rf 命令 与正则表达式
  5. 网页上播放视频的免费的播放器_CKPlayer
  6. spring boot项目使用ojdbc8连接oracle 12c(12.2.0.1.0),解决启动极慢问题!
  7. 容齐的身世_白发容齐和容乐是什么关系?容齐和容乐是兄妹吗?
  8. (朴灵著) 深入浅出node.js_朴灵 (2013) 深入浅出Node.js. 人民邮电出版社, 北京.
  9. 继电器电路原理图,PNP和NPN三极管介绍
  10. 关于USB CCID 协议的一些英文缩写