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 自身提供了一堆没法 ...
随机推荐
- JavaScript 滚动条滚动到底部才触发按钮是否可用
应用代码片段: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- Memcached深度剖析:解锁高性能分布式内存缓存的秘密
引言 在当今快节奏的互联网世界中,应用程序的响应速度往往是用户体验的关键.为了提升性能,减轻数据库的压力,Memcached作为一种高性能的分布式内存对象缓存系统,被广泛应用于加速动态Web应用程序. ...
- TIDB 数据库架构概述
学习目标 题解数据库整体架构 了解 TiDB Server .TiKV.TiFlash.和 PD 的主要功能 文章末尾获取笔记.视频资料,持续更新 体系架构 水平扩容或者缩容 金融级高可用 实时 HT ...
- nuxt,从开发到线上部署
起因: 前段时间,同组小伙伴使用vue做了一个小后台,使一位后端沉寂多年得求道之心又躁动了起来...然后,当我和这个躁动起来得后端要合作重构一个网站得时候,后端小哥哥说,就知道套页面,套页面,不用新技 ...
- 利用Windows自带性能计数器分析软件产品的性能瓶颈(转)
利用Windows性能计数器分析软件产品的性能瓶颈转自:http://blog.163.com/jack_test/blog/static/166620663201061594459936/ [摘要] ...
- 有限Abel群的结构(1)
版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 https://www.cnblogs.com/Colin-Cai/p/18774816.html 作者:窗户 ...
- Redis 原理 - Sorted Set (ZSet)
Sorted Set (ZSet) 数据结构 Sorted Set (ZSet), 即有序集合, 底层使用 压缩列表(ziplist) 或者 跳跃表(skiplist) 使用 压缩列表(ziplist ...
- 构建窗体--java进阶day03
1.窗体对象Jframe 要创建窗体就需要Jframe对象,窗体创建好不会自己显示,还需要我们自己写一段代码让其显示 2.设置窗体可见--setVisible(true) 该方法用于显示窗体 3.窗体 ...
- study Rust-7【使用结构体的demo】
fn main() { let width1 = 30; let height1 = 50; println!( "The area of the rectangle is {} squar ...
- Dubbo 中的集群容错
前言 在微服务架构中,服务间的依赖关系复杂且动态,任何一个服务的故障都可能引发连锁反应,导致系统雪崩.一个好的容错设计可以避免这些问题发生: 服务雪崩效应:单个服务崩溃或响应延迟可能导致调用链上的所有 ...