MySQl 专栏持续更新 不说晦涩难懂的东西 尽量输出容易理解 和 使用的SQL技巧 和 初中级开发不是很常用的但很有用的知识
欢迎查看👉🏻👉🏻👉🏻SQL 专栏 查漏补缺 指教一二
前言
通过思路解析 分析SQL书写 拆分逻辑 简单易懂 跟着学习 等系列更新完 SQL编写能力 和 SQL思维都会有提升 欢迎关注专栏 如果有更简单的接替方法 可以发在评论区会补充完善
为什么 进行SQL 思维训练 真正做过实战项目的人明白 其实开发思维很重要 开发思维是大于 开发能力的 SQL思维能力也一样 因为SQL是和数据直接打交道的 需要去训练自己的编写能力和编写思路 能够最快的找到最优解
如果需要表结构请前往上一篇文章进行复制 不再重复写入本文章
本文章会分析三个中等 SQL 问题 进行SQ
表对应关系:
中等
难度:
问题
查询和Id为 3号的同学学习的课程完全相同的其他同学的信息
示例:
分析
这里提示一下 所有的前提建立在 一个学生不会选择相同的课程
- 首先Id 为 3 可以作为一个查询条件
- 学生表 分数表
先查询Id 为三的学生课程
我们找到结果学过 2 1 3 课程的同学
前提是 课程 + 学生是唯一的 所以 我们可以in 一下
可以找出学过这三门课程中的同学 但是其中有的完全学过有的没有完全学过 所以还需要过滤
进行分组 统计 筛选出 课程数 = id 为 的学生课程数
这个问题 子查询比较多 但是思路还好
思维步骤
- 先查询出 s_id !=3 的学生
- 然后查询 c_id 在 学生 3 学习的课程内的信息
- 然后分组过滤 找到 课程数相同的 同学 因为课程不会重复 所以课程数相同 一定是学过这三门课程的
知识点
- 分组
- 子查询
- 筛选
中等
难度:
问题
查询未学过泡芙老师任何一门课程的学生
示例
分析
这个问题的思路比较简单
- 学生 student 老师 teacher 课程 course 未学过 score
至少需要四张表
我们只需要 将表进行连接就行 查询出学过的学生 剩余的就是没有学过的学生
这个思路比较简单没什么弯弯 就不啰嗦了
思路步骤
- 表连接 查询出学习过这门课程的同学
- 通过not in进行过滤 或者 使用表连接 推荐使用表连接进行数据查询
知识点
- 表连接
- not in
中等
难度:
问题
查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩
示例
分析
这种题感觉有点简单了 需要找一些比较难的问题
这个比较好理解 找到两门分数 < 60 的同学
- 两门 我们需要去统计 可以考虑分组 筛选 带上条件 <60
- 求平均数
- 连接student表
这个没啥分析的 明天挑战高难度
本文正在参加「金石计划 . 瓜分6万现金大奖」