最近的项目都比较忙, 没太有时间来做练习, 不过 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 日常练习 (十四)的更多相关文章

  1. 日常英语---十四、Dolce & Gabbana cancels China show amid 'racist' ad controversy(adj.温柔的,prep.在其中)

    日常英语---十四.Dolce & Gabbana cancels China show amid 'racist' ad controversy(adj.温柔的,prep.在其中) 一.总结 ...

  2. SQL系列(十四)—— 视图(view)

    说到视图view,大家应该都很熟悉.如几何学中用三视图来描述集合物体的外观构成,三视图中反应出物体的面貌.这里我们讨论数据库中视图的概念: 什么是视图 为什么会有会用视图 怎样使用视图 视图与表的异同 ...

  3. SQL语句(十四)子查询

    --1. 使用IN关键字 --例1 查询系别人数不足5人的系别中学生的学号.姓名和系别 --系别人数不足5人的系别 ==>选择条件 select Sdept from Student Group ...

  4. C#语言和SQL Server第十三 十四章笔记

    十三章  使用ADO.NET访问数据库 十四章使用ADO.NET查询和操作数据库 十三章:                                                       ...

  5. SQL注入之Sqli-labs系列第四十一关(基于堆叠注入的盲注)和四十二关四十三关四十四关四十五关

    0x1普通测试方式 (1)输入and1=1和and1=2测试,返回错误,证明存在注入 (2)union select联合查询 (3)查询表名 (4)其他 payload: ,( ,( 0x2 堆叠注入 ...

  6. SQL注入之Sqli-labs系列第三十四关(基于宽字符逃逸POST注入)和三十五关

    开始挑战第三十四关和第三十五关(Bypass add addslashes) 0x1查看源码 本关是post型的注入漏洞,同样的也是将post过来的内容进行了 ' \ 的处理. if(isset($_ ...

  7. OCM_第十四天课程:Section6 —》数据库性能调优_各类索引 /调优工具使用/SQL 优化建议

    注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...

  8. SQL注入之Sqli-labs系列第二十四关(二阶注入)

    开始挑战第二十四关(Second Degree Injections) 0x1 前言 SQL注入一般分为两类:一阶SQL注入(普通SQL注入),二阶SQL注入 .二次注入不是注入两次的意思,请不要混淆 ...

  9. 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 ...

  10. FreeSql (二十四)Linq To Sql 语法使用介绍

    原本不支持 IQueryable 主要出于使用习惯的考虑,如果继承 IQueryable,编写代码的智能总会提示出现一堆你不想使用的方法(对不起,我有强迫症),IQueryable 自身提供了一堆没法 ...

随机推荐

  1. Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版

    Deepseek卡的问题已经有几周了,还有同学没有解决这个问题? 今天就来教大家如何白嫖阿里云的Deepseek-R1满血版,新用户享受100万token额度,相当的富裕,可以随便用了.并且还配用AP ...

  2. Linux命令行连接蓝牙设备

    Linux命令行连接蓝牙设备 查看Bluetooth设备: hciconfig 启动一个Bluetooth设备,例如:hci0: hciconfig hci0 up 相关指令 查看特定的Bluetoo ...

  3. STM32的SYSTICK 定时器(系统滴答定时器)

    什么是SysTick? 这是一个24位的系统节拍定时器system tick timer,SysTick,具有自动重载和溢出中断功能,所有基于Cortex_M3处理器的微控制器都可以由这个定时器获得一 ...

  4. jQuery validate验证表单隐藏域

    function validInfoForm(){        return $("#form_password").validate({            ignore : ...

  5. springboot2.1.6整合activiti6.0(一)

    一.pom <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3. ...

  6. 错误修正记录: [Vivado 12-8300] Launch HLS failed! Please see vitis_hls.log for details.

    起因 使用了Vivado Video Frame Buffer Read和Vivado Video Frame Buffer Write,按out of context模式综合失败.vivado版本2 ...

  7. ubuntu apt 安装报错:Media change: please insert the disc labeled 'Ubuntu 20.04.5 LTS Focal Fossa - Release amd64 (20220831)' in the drive '/cdrom/' and press [Enter]

    前言 如果你在 Ubuntu 上使用 apt 安装软件包时遇到 "Media change: please insert the disc labeled ..." 的错误消息,这 ...

  8. oracle忘记sys,system密码的解决方法

    1. 找到oracle的安装目录: 找到此路径(D:\app\Administrator\product\11.2.0\dbhome_1\BIN),通过sqlplus.exe执行操作命令.(如果提示s ...

  9. Oracle配置和性能优化方法

          性能是衡量软件系统的一个重要部分,可能引起性能低下的原因很多,如CPU/内存/网络资源不足,硬盘读写速度慢,数据库配置不合理,数据库对象规划或存储方式不合理,模块设计对性能考虑不足等. 1 ...

  10. 04 详解”死亡ReLU“问题

    本篇文章尝试通过具体的神经网络例子,来深入探讨"死亡ReLU"的问题. 很多资料都会提到神经元"永久性死亡"这种说法,我认为这会对我们的理解产生一定的误解.事实 ...