MySQL作战计划
写在前面
即使是非科班出身的笔者也听过数据库的鼎鼎大名了,2020年尾有幸乘上datawhale社区的学习车,希望经过半个月的学习能够一窥洞天,以下学习内容和心得来自datawhale社区第20期 学习者手册(SQL)
Task00:环境搭建
指南针对的版本是8.0.21,2020-12-15下载的版本是8.0.22,安装过程大同小异,区别在于新版本没有询问是否以集群方式安装 MySQL,忽略就好。
Task01:初识数据库
讲义讲解的知识点见网页
要点
- 区别了概念数据库(Database,DB),数据库管理系统(Database Management System,DBMS),简单介绍了五种类型的DBMS。本次学习SQL 语言的数据库管理系统,也就是关系数据库管理系统 (RDBMS)的操作方法。
- 数据库储存的表结构:行=记录,列=字段,行列交汇=单元格(一条记录)。
- SQL语句分为三类:DDL(Data Definition Language,数据定义语言),DML(Data Manipulation Language,数据操纵语言),DCL(Data Control Language,数据控制语言)。
- SQL基本书写规则(记住“以分号结尾”和“不区分大小写”,书写规范见附录1 - SQL 语法规范)
Task02:基础排序与查询
讲义讲解的知识点见网页
要点
- SELECT语句:两个子句(clause)-SELECT, FROM;WHERE
- 算术运算符
- 比较运算符
- 逻辑运算符:NOT, AND, OR, 括号优先
- 真值表
Task03:复杂一点的查询
讲义讲解的知识点见网页
要点
- 视图和表的区别“视图不是表,视图是虚表,视图依赖于表”
- 视图的用法:创建(CREAT VIEW … AS…)、修改(ALTER VIEW … AS …)、更新(UPDATE)、删除(DROP VIEW …)
- 子查询——一个查询语句嵌套在另一个查询语句内部的查询:嵌套子查询、标量子查询、关联子查询
Task04:集合运算
讲义讲解的知识点见网页
要点
- 表的加法:UNION
- UNION 与 OR 的联系与区别
- UNION ALL:包含重复行
- 差集:NOT IN
- 连结(JOIN):内连结(INNER JOIN),自然连结(NATURAL JOIN),外连结(OUTER JOIN)
- 多表连结
- 交叉连结—— CROSS JOIN(笛卡尔积)
Task05:SQL高级处理
讲义讲解的知识点见网页
要点
一、窗口函数OLAP(= OnLine AnalyticalProcessing)
- PARTITON BY
- ORDER BY
- 聚合函数:UM、MAX、MIN等
- 排序用的专用窗口函数:RANK、DENSE_RANK等
- 应用:计算移动平均
二、GROUPING运算符
6. ROLLUP - 计算合计及小计
Task06:综合练习
练习一:各部门工资最高的员工(难度:中等)
解答要点:MAX()
练习二: 换座位(难度:中等)
解决思路:观察结果,交换座位即是原来id为奇数的同学,新id=旧id+1;原来id为偶数的同学,新id=旧id-1;如果最后一个同学的id为奇数,新id=旧id
练习三: 分数排名(难度:中等)
考察点:窗口函数
练习四:连续出现的数字(难度:中等)
解决思路:连续3次出现,可通过id连续判断,且num都相等
练习五:树节点 (难度:中等)
解决思路:子查询,JOIN
练习六:至少有五名直接下属的经理 (难度:中等)
练习七: 分数排名 (难度:中等)
解决要点:窗口函数
练习八:查询回答率最高的问题 (难度:中等)
练习九:各部门前3高工资的员工(难度:中等)
解决思路:利用窗口函数对各部门工资排名
练习十:平面上最近距离 (难度: 困难)
练习十一:行程和用户(难度:困难)
解决思路:要计算非禁止用户的取消率,首先要的到订单对应的乘客和司机是否是禁止用户,所以用两次JOIN分别得到非禁止乘客和非禁止司机的订单,然后计算取消率