SQL 日常练习 (十四)
最近的项目都比较忙, 没太有时间来做练习, 不过 sql 这块, 还是始终要保持良好的手感, 我已经渐渐感觉到, 随着写得越来越多, 当然不只是在这里, 更多是在工作中, 不过涉及信息安全不能共享. 结论是, sql 写好了, 能够解决一大堆的问题哦. 今天被客户恶心到了, 要给台账建一个表, 做一个填报 ... 100来个字段, 尤其是在给表字段取名的时候, 我感觉, 我的英文词汇量,配不上辣么多的字段....纯手打的方式, 我也渐渐喜欢了, 比起智能提示, 不如记事本来直接写 sql 得了. 加完班, 基础的 sql 还是继续练起来呀, 继续网上搬搬砖, 写几句.
表关系
!
需求 01
查询平均成绩大于等于 85 的 所有学生的学号, 姓名, 平均成绩
分析
这就跟直接的那个用 max(case when ..) 列字段 横向展开是一样的呀, 平均成绩.. 聚合, 必然要做 group by
直接来看看, 平均分 >= 85 是哪些人.
select
s_id,
avg(score) as avg_score
from score
group by s_id
having avg_score >= 85
+------+-----------+
| s_id | avg_score |
+------+-----------+
| 0001 | 89.6667 |
+------+-----------+
1 row in set (0.01 sec)
有了 s_id, 匹上姓名即可呀. inner join 即可
select
a.s_id,
b.s_name,
avg(a.score) as avg_score
from score as a
-- 根据 s_id 匹配上 s_name
inner join student as b
on a.s_id = b.s_id
group by a.s_id, b.s_name
having avg_score >= 85
+------+--------+-----------+
| s_id | s_name | avg_score |
+------+--------+-----------+
| 0001 | 王二 | 89.6667 |
+------+--------+-----------+
1 row in set (0.00 sec)
是蛮简单的. 当然也可能是我最近业务熟悉比较多一点, 因此写起来 sql 也就更顺畅一些了呀.
需求 02
查询 每门课程的平均成绩, 按平均成绩 升序排列, 平均成绩相同, 按课程号 降序排列
分析
核心点是 group by 和 order by . 其实也是非常简单的一个练手.
select
a.c_id,
b.c_name,
avg(a.score) as avg_score
from score as a
-- 匹配上课程名称
inner join course as b
on a.c_id = b.c_id
group by a.c_id, b.c_name
order by avg_score asc, a.c_id desc
| c_id | c_name | avg_score |
+------+--------+-----------+
| 0002 | 数学 | 76.6667 |
| 0001 | 语文 | 80.0000 |
| 0003 | 英语 | 86.3333 |
+------+--------+-----------+
3 rows in set (0.00 sec)
需求 03
查询课程名称为 "数学", 且分数低于 90 分的学生姓名, 分数
分析
这种毫无难度的, 直接秒杀它. 哦, 也不能说毫无难度, 起码它是要涉及 score, course, student 三张表的哦
select
c.s_id,
c.s_name,
a.score as 数学成绩
from score as a
-- 匹配上课程名称
inner join course as b
on a.c_id = b.c_id
-- 匹配上学生姓名
inner join student as c
on a.s_id = c.s_id
where (a.score < 90) and (b.c_name = '数学')
+------+-----------+--------------+
| s_id | s_name | 数学成绩 |
+------+-----------+--------------+
| 0002 | 星落 | 60 |
| 0003 | 胡小适 | 80 |
+------+-----------+--------------+
2 rows in set (0.00 sec)
小结
- 日常联系 group by 和 order by 这些常用的 (只要涉及聚合, 必然 group by )
- Join 即表之间的关联上, 或者说拼接上, 脑海有画面, 基本就成功了, Join 真的太强大
- sql 不断练习才能掌握, 这是一个必须要走过的路程, 在路上, 我开始加速了.
SQL 日常练习 (十四)的更多相关文章
- 日常英语---十四、Dolce & Gabbana cancels China show amid 'racist' ad controversy(adj.温柔的,prep.在其中)
日常英语---十四.Dolce & Gabbana cancels China show amid 'racist' ad controversy(adj.温柔的,prep.在其中) 一.总结 ...
- SQL系列(十四)—— 视图(view)
说到视图view,大家应该都很熟悉.如几何学中用三视图来描述集合物体的外观构成,三视图中反应出物体的面貌.这里我们讨论数据库中视图的概念: 什么是视图 为什么会有会用视图 怎样使用视图 视图与表的异同 ...
- SQL语句(十四)子查询
--1. 使用IN关键字 --例1 查询系别人数不足5人的系别中学生的学号.姓名和系别 --系别人数不足5人的系别 ==>选择条件 select Sdept from Student Group ...
- C#语言和SQL Server第十三 十四章笔记
十三章 使用ADO.NET访问数据库 十四章使用ADO.NET查询和操作数据库 十三章: ...
- SQL注入之Sqli-labs系列第四十一关(基于堆叠注入的盲注)和四十二关四十三关四十四关四十五关
0x1普通测试方式 (1)输入and1=1和and1=2测试,返回错误,证明存在注入 (2)union select联合查询 (3)查询表名 (4)其他 payload: ,( ,( 0x2 堆叠注入 ...
- SQL注入之Sqli-labs系列第三十四关(基于宽字符逃逸POST注入)和三十五关
开始挑战第三十四关和第三十五关(Bypass add addslashes) 0x1查看源码 本关是post型的注入漏洞,同样的也是将post过来的内容进行了 ' \ 的处理. if(isset($_ ...
- OCM_第十四天课程:Section6 —》数据库性能调优_各类索引 /调优工具使用/SQL 优化建议
注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...
- SQL注入之Sqli-labs系列第二十四关(二阶注入)
开始挑战第二十四关(Second Degree Injections) 0x1 前言 SQL注入一般分为两类:一阶SQL注入(普通SQL注入),二阶SQL注入 .二次注入不是注入两次的意思,请不要混淆 ...
- centos Linux系统日常管理1 cpuinfo cpu核数 命令 w, vmstat, uptime ,top ,kill ,ps ,free,netstat ,sar, ulimit ,lsof ,pidof 第十四节课
centos Linux系统日常管理1 cpuinfo cpu核数 命令 w, vmstat, uptime ,top ,kill ,ps ,free,netstat ,sar, ulimit ...
- FreeSql (二十四)Linq To Sql 语法使用介绍
原本不支持 IQueryable 主要出于使用习惯的考虑,如果继承 IQueryable,编写代码的智能总会提示出现一堆你不想使用的方法(对不起,我有强迫症),IQueryable 自身提供了一堆没法 ...
随机推荐
- 解决easyexcel合并单元格数组求和重复问题
背景 EasyExcel(根据条件动态合并单元格的重复数据))_Violet-CSDN博客_easyexcel动态合并单元格现有的订单导出是使用的easyExcel完成的.对于相同单元格的合并是自定义 ...
- 【效能提升】上线前漏了SQL脚本,漏加上某个配置项了?
背景 一个版本从开始开发到上线,可能经历10多天,甚至更久. 由于这个过程的时间较长,难免出现某些需要执行的SQL脚本.需要配置的配置项,到了上线前,却被遗漏了,最后导致出现线上问题才发现. 我们团队 ...
- Deepseek学习随笔(4)--- DeepSeek 在学术中的应用
文献阅读与总结 对于学术研究人员来说,DeepSeek 可以帮助快速阅读和总结文献: 上传 PDF 文献,输入:请总结本文的研究方法和核心结论 DeepSeek 会生成文献的摘要,帮助你快速了解主要内 ...
- 洋葱学园:开启高效学习之旅的宝藏 APP 40天会员5元到手价
洋葱学园是一款在在线教育领域表现出色的教学 APP ,下面为您详细介绍它的特点以及推荐理由. 丰富的学科覆盖: 洋葱学园涵盖了从小学到高中的全学科课程,包括数学.语文.英语.物理.化学等.无论您处于哪 ...
- 远程debug
1. 在idea中添加远程服务器信息 打开应用配置 填写配置 1. 在 + 选择 Remote JVM Debug 2. 在 2 处填写名称,任意 3. 在 3 填写服务器ip 4. 在 4 填写de ...
- php服务器如何验证令牌
在PHP中,令牌通常用于防止跨站请求伪造(CSRF)攻击.以下是一个简单的例子,展示了如何生成和验证令牌: 生成令牌: function generateToken($length = 32) { / ...
- 【Python】尝试切换py版本
失败 问chatgpt,怎么把abaqus python 版本切换到py3.6,结果失败. chatgpt给出的建议: 修改abaqus_v6.env,明显扯淡!我就尝试在custom_v6.env中 ...
- 在 Hugging Face 上部署语音转语音模型
介绍 S2S (语音到语音) 是 Hugging Face 社区内存在的一个令人兴奋的新项目,它结合了多种先进的模型,创造出几乎天衣无缝的体验: 你输入语音,系统会用合成的声音进行回复. 该项目利用 ...
- New Bing 全面开放?我看未必
前段时间大家应该都被ChatGPT刷屏了,其实就回答来说New Bing 才是最厉害的,因为它底层使用了ChatGPT 并且可以支持联网查询数据,回答中还能支持看到出处,方便确认其真实性. New B ...
- IDA Pro 初步实践
实践1 背景 某软件A,在非全屏显示时带有常规菜单,在全屏下没有常规菜单,但是有顶部工具条,工具条上有菜单和按钮.对于全屏和非全屏的切换可以通过菜单,也可以通过快捷键ctrl + alt + ente ...