SQl 思维训练六

·  阅读 1525
SQl 思维训练六

MySQl 专栏持续更新 不说晦涩难懂的东西 尽量输出容易理解 和 使用的SQL技巧 和 初中级开发不是很常用的但很有用的知识

欢迎查看👉🏻👉🏻👉🏻SQL 专栏 查漏补缺 指教一二

src=http __img2.biaoqingjia.com_biaoqing_201810_2c3993f64eec252da6d674f9d80fc4e9.gif&refer=http __img2.biaoqingjia.gif

前言

通过思路解析 分析SQL书写 拆分逻辑 简单易懂 跟着学习 等系列更新完 SQL编写能力 和 SQL思维都会有提升 欢迎关注专栏 如果有更简单的接替方法 可以发在评论区会补充完善

为什么 进行SQL 思维训练 真正做过实战项目的人明白 其实开发思维很重要 开发思维是大于 开发能力的 SQL思维能力也一样 因为SQL是和数据直接打交道的 需要去训练自己的编写能力和编写思路 能够最快的找到最优解

如果需要表结构请前往上一篇文章进行复制 不再重复写入本文章

本文章会分析三个中等 SQL 问题 进行SQ

表对应关系:

图片.png

中等

难度:

src=http%20__qq.yh31.com_tp_zjbq_201203060912442848.gif&refe.gifsrc=http%20__qq.yh31.com_tp_zjbq_201203060912442848.gif&refe.gif

问题

查询和Id为 3号的同学学习的课程完全相同的其他同学的信息

示例:

图片.png

分析

这里提示一下 所有的前提建立在 一个学生不会选择相同的课程

  • 首先Id 为 3 可以作为一个查询条件
  • 学生表 分数表

先查询Id 为三的学生课程

图片.png

我们找到结果学过 2 1 3 课程的同学

前提是 课程 + 学生是唯一的 所以 我们可以in 一下

图片.png

可以找出学过这三门课程中的同学 但是其中有的完全学过有的没有完全学过 所以还需要过滤

图片.png

进行分组 统计 筛选出 课程数 = id 为 的学生课程数

图片.png

这个问题 子查询比较多 但是思路还好

思维步骤

  • 先查询出 s_id !=3 的学生
  • 然后查询 c_id 在 学生 3 学习的课程内的信息
  • 然后分组过滤 找到 课程数相同的 同学 因为课程不会重复 所以课程数相同 一定是学过这三门课程的

知识点

  • 分组
  • 子查询
  • 筛选

中等

难度:

src=http%20__qq.yh31.com_tp_zjbq_201203060912442848.gif&refe.gifsrc=http%20__qq.yh31.com_tp_zjbq_201203060912442848.gif&refe.gif

问题

查询未学过泡芙老师任何一门课程的学生

示例

图片.png

分析

这个问题的思路比较简单

  • 学生 student 老师 teacher 课程 course 未学过 score

至少需要四张表

我们只需要 将表进行连接就行 查询出学过的学生 剩余的就是没有学过的学生

图片.png

这个思路比较简单没什么弯弯 就不啰嗦了

思路步骤

  • 表连接 查询出学习过这门课程的同学
  • 通过not in进行过滤 或者 使用表连接 推荐使用表连接进行数据查询

知识点

  • 表连接
  • not in

中等

难度:

src=http%20__qq.yh31.com_tp_zjbq_201203060912442848.gif&refe.gifsrc=http%20__qq.yh31.com_tp_zjbq_201203060912442848.gif&refe.gif

问题

查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩

示例

图片.png

分析

这种题感觉有点简单了 需要找一些比较难的问题

这个比较好理解 找到两门分数 < 60 的同学

  • 两门 我们需要去统计 可以考虑分组 筛选 带上条件 <60
  • 求平均数
  • 连接student表

图片.png

这个没啥分析的 明天挑战高难度

推荐阅读相关文章:小白也能看到索引的使用和规则

本文正在参加「金石计划 . 瓜分6万现金大奖」

收藏成功!
已添加到「」, 点击更改