SQL 日常练习 (十六)
最近接触了一波 RPA, 可以用来做一些数据采集的事情, 或者任意控制电脑上的软件, 感觉上是挺厉害的, 但我就是不想用, 尽管我尝试了一波, 最后还是放弃 了, 我还是喜欢纯代码的工作方式, 最为讨厌哪些软件来辅助工作, 然后..我竟然直接拒绝了客户的任务需求, 理由是跟我技术栈无关, 我是个文科生, 学不会为由. 我觉得,我还是对自己是比较了解的, 我只会做我感兴趣的事情, 喜欢就会做, 不喜欢就不做, 不论是学生时代起还是工作后, 从来不改变自己的信念和性格. "复归于婴儿" , 这也可能是我一生的追求吧.
我也有我自己的职业规划, 职业兴趣, 一直在不断积淀, 不能走偏了. 数据这块, 我的历程顺序是,
- 商业市场理论 -> 市场研究与预测 -> 数据建模与挖掘 -> 数据采集 -> 数据清洗 -> 数据分析 -> 数据可视化 BI
而我的学习是,
- 先学文科, 后学理科; 工作是先做业务, 再做技术, 到现在业务技术都能驾驭.
这个不寻常的顺序, 我一步步走过来, 就全是挑战, 智力和精力上的挑战, 还好, 卒或有所闻, 一直在路上.
扯远了, 继续练练 sql, 虽然都是些简单的, 但, 我就是要反复练习到极致, 成为我除 Python 外的第二核心硬技能
表关系

需求 01
查询 课程成绩在 80 分以上 的课程名称, 分数和学生姓名
分析
从 score 中, 先查出大于80 的 c_id 和 s_id 分别再匹上 课程表 和学生表即可
select
a.*,b.*,c.*
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 > 80
先全部捞出来看一把这个查询集
+------+------+-------+------+--------+------+------+--------+------------+--------+
| s_id | c_id | score | c_id | c_name | t_id | s_id | s_name | birth_date | gender |
+------+------+-------+------+--------+------+------+--------+------------+--------+
| 0001 | 0002 | 90 | 0002 | 数学 | 0001 | 0001 | 王二 | 1989-01-01 | 男 |
| 0001 | 0003 | 99 | 0003 | 英语 | 0003 | 0001 | 王二 | 1989-01-01 | 男 |
+------+------+-------+------+--------+------+------+--------+------------+--------+
2 rows in set (0.00 sec)
然后只选择出需要的字段即可.
select
b.c_name as 课程名称,
a.score as 分数,
c.s_name 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 > 80
+--------------+--------+--------------+
| 课程名称 | 分数 | 学生姓名 |
+--------------+--------+--------------+
| 数学 | 90 | 王二 |
| 英语 | 99 | 王二 |
+--------------+--------+--------------+
2 rows in set (0.00 sec)
需求 02
查询 不及格学生的学号, , 姓名, 的课程, 并按课程号, 从大到小排列
分析
这种级别的, 完全秒杀它.
select *
from score as a
where a.score < 60
这样就过筛选出, 哪些是不及格的 学号, 课程号, 然后跟上面的一样, 关联表, 匹配上来即可.
select
c.s_id as 学号,
c.s_name as 姓名,
b.c_name 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 < 60
order by b.c_id desc
我的数据集是没有不及格的兄弟的, 就不查询了. 套路都是一样的.
需求 03
课程编号为 0002 且 课程成绩在80分以上的学生学号和姓名
分析
反正都是日常练练而已, 都是秒杀, 没啥难度的, 一通百通啦.
select
b.s_id as 学号,
b.s_name as 姓名,
c.c_name as 课程名称
from score as a
inner join student as b
on a.s_id = b.s_id
inner join course as c
on a.c_id = c.c_id
where (a.c_id = 0002) and (a.score > 80)
+--------+--------+--------------+
| 学号 | 姓名 | 课程名称 |
+--------+--------+--------------+
| 0001 | 王二 | 数学 |
+--------+--------+--------------+
1 row in set (0.00 sec)
小结
- 先在多写一方面是熟悉, 也是在写成自己一种风格, 比如排版风格, 不仅仅要有 Pythonic , 也要有 sql_style
- 写 sql 心得, 就是从机器逻辑去写, 先写from , 在 join, where, group by , having, order by ... 最后再 select..
- join 还是要多用, on 的 多条件, 还有 内置函数等的用法, 果然 sql 之路还是很长呀.
SQL 日常练习 (十六)的更多相关文章
- SQL语句(十六)实现集合运算、对数据修改、数据表复制
(一).集合运算(交.并.补) --(1)Union 并运算 select Sname from Student UNION select Tname From Teacher --(2)INTERS ...
- centos linux系统日常管理3 服务管理ntsysv,chkconfig,系统日志rsyslog,last ,lastb ,exec,xargs,dmesg,screen,nohup,curl,ping ,telnet,traceroute ,dig ,nc,nmap,host,nethogs 第十六节课
centos linux系统日常管理3 服务管理ntsysv,chkconfig,系统日志rsyslog,last ,lastb ,exec,xargs,dmesg,screen,nohup,cur ...
- 风炫安全Web安全学习第十六节课 高权限sql注入getshell
风炫安全Web安全学习第十六节课 高权限sql注入getshell sql高权限getshell 前提条件: 需要知道目标网站绝对路径 目录具有写的权限 需要当前数据库用户开启了secure_file ...
- SQL注入之Sqli-labs系列第二十六关(过滤空格、注释符、逻辑运算符注入)和第二十六A
开始挑战第二十六关(Trick with comments and space) 0x1看看源代码 (1)过滤了# or and /**/ / \ ,通过判断也过滤了空格 (2)这样一来只能看 ...
- SQL注入之Sqli-labs系列第十五关和第十六关(基于POST的时间盲注)
开始挑战第十五关(Blind- Boolian Based- String)和 第十六关(Blind- Time Based- Double quotes- String) 访问地址,输入报错语句 ' ...
- 50个SQL语句(MySQL版) 问题十六
--------------------------表结构-------------------------- student(StuId,StuName,StuAge,StuSex) 学生表 tea ...
- 我的MYSQL学习心得(十六) 优化
我的MYSQL学习心得(十六) 优化 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...
- 解剖SQLSERVER 第十六篇 OrcaMDF RawDatabase --MDF文件的瑞士军刀(译)
解剖SQLSERVER 第十六篇 OrcaMDF RawDatabase --MDF文件的瑞士军刀(译) http://improve.dk/orcamdf-rawdatabase-a-swiss-a ...
- Python之路【第十六篇】:Django【基础篇】
Python之路[第十六篇]:Django[基础篇] Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了O ...
- 十六款值得关注的NoSQL与NewSQL数据库--转载
原文地址:http://tech.it168.com/a2014/0929/1670/000001670840_all.shtml [IT168 评论]传统关系型数据库在诞生之时并未考虑到如今如火如荼 ...
随机推荐
- 13. Docker-compose容器编排(详解说明)
13. Docker-compose容器编排(详解说明) @ 目录 13. Docker-compose容器编排(详解说明) 1. Docker-compose容器编排概述 2. Docker-Com ...
- 开源一款I2C电机驱动扩展板-FreakStudio多米诺系列
总线直流电机扩展板 原文链接: FreakStudio的博客 摘要 设计了一个I2C电机驱动板,通过I2C接口控制多个电机的转速和方向,支持刹车和减速功能.可连接16个扩展板,具有PWM输出.过流过热 ...
- [THUWC2017] 在美妙的数学王国中畅游 题解(内附求导小技巧)
事实证明物竞笔记是个好东西,可惜没带,不然还能谎称自己会一点求导和微积分. 顺便在这里把比较经典的一些关于求导的东西记录一下: 常用函数求导: \(C'=0,(x^n)'=nx^{n-1},(\log ...
- ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this
mysql操作错误: mysql> use mysql;ERROR 1820 (HY000): You must reset your password using ALTER USER sta ...
- Java开发中long类型转换json传递到前端后精度丢失问题
将文章的id由long类型手动改为String类型(需要修改表结构); 可以使用Jackson进行序列化解决
- springboot+vue项目:工具箱
常用账号管理:工作相关账号.游戏账号.各平台账号 加班调休管理:公司没有对应的系统,需要自己记录加班调休情况. 待办事项:方便记录待办,以提醒还有哪些事情没有办理. 待实现功能: 1.点击侧边栏菜单, ...
- vue3用vite新建项目
1. npm init vue@latest vue3-project 调用create-app创建, 指定了目录是vue3-projece,但是,紧接着有一堆配置要询问. 2. npm create ...
- C++ open()和read()函数使用详解
对于Framework工程师来说,必要C或者C++编程能力是必须的,像对设备节点的操作是最基本的操作,那么我们便会用到open和read函数.open()函数用于打开文件,而read()函数用于从打开 ...
- mac php.ini在哪
解答 mac 默认没有 php.ini 文件,但是有对应的模版文件 php.ini.default,位于/etc/php.ini.default,可以拷贝一份进行修改. cd /etc sudo cp ...
- go module基本使用
前提 go版本为1.13及以上 官方文档 如果你想更深层次的了解GO MODULE的意义及开发者们的顾虑,可以直接访问官方文档(EN) https://github.com/golang/go/wik ...