这段时间学习了mysql数据库,现在对学习内容做一个总结,分为这几部分。通过总结巩固知识,也可以通过这篇文章来对MYSQL学习内容进行定期回顾和复习。
学习感想
一些学习方法
内容回顾总结
小结
MYSQL学习暂时告一段落,但是学习远远没有结束,这个阶段学习相当于师傅领进门,把关键的知识点学习了,接下来更重要的是利用学到的知识继续去学习,比如函数有非常多,是学不完的,根据需求在需要时去搜索学习使用,还有一些其他操作。学习了学习的方法更重要。在做项目的时候,我只导入的是10万条数据,这个数据源有几百万条数据,解压后有3点几G,这个数据靠excel是打不开的,只能用数据库,而不管你需要什么数据,你想分析什么问题,都必须得去数据库调用,然后再根据需要导出进行分析,而每一次的查询都会综合运用查询,子查询,多表查询,关联子查询,函数,case when等,如果没有一定的基础,完全无法把这个查询自己写出来,只能望“洋”兴叹,查询的语句往往不难,而且同一类问题一条语句可以反复利用,难的是要用到是时候不需要思考太久,直接就写出来,而不是需要什么就要去翻一遍子句怎么写,甚至重新学习一遍。如果长时间不用也会遗忘,所以我觉得有必要给自己的学习做总结,定期回顾和复习,并通过动手操作来熟练掌握。
一、学习感想 why
黄金圈法则告诉我们思考顺序是“从内向外”,也就是按 Why—How—What 的顺序思考,而不是从外到内,学习MYSQL也是一样。
why
谈学习感谢之前我先想说我为什么而学习MYSQL。坚持学会不在于一个东西有多难,而在于这个东西的意义,只有知道学习这个东西的作用和意义,才能持之以恒的学习。我想通过学习成为一名数据分析师,查看数据分析师的职位要求,会发现数据分析师的相关要求里面都会有要求会熟练掌握SQL,这个是数据分析师必备的技能,SQL也是必考的知识点之一。Excel对10万条以内数据处理没问题,但是现在大数据时代,很多公司的数据都是存放在数据库里面的,就需要学会操作数据的SQL,数据分析师,机器学习,开发工程师都需要学会如何使用SQL来分析数据。
一些学习感想:刚开始感觉比较简单,入门很容易,甚至有种似曾相识的感觉(是因为以前学习过统计学里面有据库,不过实操极少,后面就忘记了),前面的简单查询都比较容易学习和理解。等到学习到复杂查询中的关联子查询,无法理解,然后就着题目,可以照着写出来,但是还是不能理解,我感觉我可能被卡住了。我先跳过关联子查询,接着进入多表查询,学习了多表查询后再回来看关联子查询,就明白了,而且也能理解,然后到项目实战的时候,要用到这些子查询,可以根据需求写出来,那一刻感觉太爽了。学习的过程,很多东西可以通过可视化软件,不断的试错,也许是因为我知道,这个东西确实不难,迟早要攻克的。就这样就把知识学完了。
二、一些学习方法 how
1、基础知识点的掌握和理解,得按顺序学习,就像SQL语法一样,顺序对了才可以运行出来,如果遇到暂时的难题,可以跳过回头再回来做,对我就是这样,关联子查询是在学习完多表查后才理解。然后学习过程伙伴很重要,看到每天有很多人在社群提交作业,和在不断互动,可以从别人的作业和问题中学习,还可以问老师 和伙伴。以下是学习我按照课程的学习顺序。
入门:什么是数据库,什么是SQL,表的创建删除和更新,数据的插入和删除和更新。
简单查询:学习SQL查询语句的基本语法,运行顺序。
汇总分析:学习如何对数据进行分组和汇总,从而分析数据。
复杂查询:创建视图,子查询,函数等,写出复杂SQL语句。
多表查询:多张表质检如何进行复杂查询,表的联结从而进行复杂分析。
高级功能:通过窗口函数和聚合窗口函数解决topN和经典排名和组内查询问题
项目实战:通过一个具体的项目,将知识点串联起来。
综合回顾:如果应对SQL笔试和面试,SQL实操运用。
2、实操 实操 再实操
实操分为两部分:用笔写和用电脑写。没错,用笔写,写思路,可以简单写,然后照着笔记在可视化软件上写出来,。用电脑写,运行,看报错信息,重写,再运行。
SQL非常重实操,就像你不可能靠看书学会游泳,真的要动手,可能会出现理解很好,动手写不出来,但是基本不可能出现动手敲得很好,但是不理解。如果没有有理解,一样的题目变个方式就写不出来了,运行就肯定会出错。最大的一点就是多做题,如果题目不会做,就把题目重新理解一遍,然后还是不懂,复习习题,再回来做。每一个习题都自己敲一遍查询子句,而在做题的时候,解法也不一定唯一,多思考,看能不能用其他方法一样解题,动手加强理解。实操实操再实操。
三、知识点总结 what
这部分主要看学习了什么?
1、什么是数据库,什么是SQL?
数据库是用于存放海量数据的。EXCEL只能存放10万条数据,相比EXCEL存放量大得多,可以多人同时使用。数据库存是用于放数据,关系数据库是多张表和各表之间的关系。SQL是操作数据库里的数据,的一种工具,用来查找数据使用数据库数据的语言。
表的基本操作:实操,软件:mysql和Navicat。关系数据库中的表结构:表名,列名,记录数据的行,数据类型,有字符串,数字。日期等,主键标识数据列名的唯一性。
2、 简单查询
基本查询语句(select *全部 as别名 distinct删除重复)
指定查询条件(where 从哪里查询)
注释和SQL语言书写注意事项(注释规范书写 运算顺序select最后执行)
运算符学习和实操(算术运算符,比较运算符,逻辑运算符)
字符串模糊查询(like % 前 后 前后%% )
书写顺序:
运行顺序:
Where表示查询的条件(三种类型运算符综合运用,字符串模糊查询like 下划线)
3、汇总分析
学习如何对数据进行分组和汇总,从而分析数据
汇总函数的应用 sum avg count等
分组、指定条件 group by,having
用SQL解决问题的 方法 三步
对查询结果排序 order by
遇到sql问题先翻译成大白话,拆解分析,然后写出SQL语言,遇到问题不会写可以先写一些试运行,然后再加一句,再运行,这个方法非常好用。
4、复杂查询
创建视图,子查询,函数等,写出复杂SQL语句
有些SQL查询语句需要频繁使用,可以保存为视图。特别是在汇总与复杂查询中,导致SQL查询语句很长,视图可提高效率。视频会随着原表状态自动更新。视图不需要保存数据,可以节省空间。
子查询:在一个查询里面嵌套另一个查询。分为三种
子查询:返回多行数据。先运行子查询,再运行其他。
标量子查询: 返回单一值数据。返回的单一的值可以和比较运算符一起使用
关联子查询:在每个组里面比较。关联子查询是在子查询里面有一个关联条件。
知识点:any(子查询) all (子查询),必须与比较运算符一起使用。
标量子查询返回的单一的值可以和比较运算符一起使用
关联条件保证了子查询返回的是当前组的数据。
-- 查找每个课程中 大于 对应课程平均成绩的学生(关联子查询)
Select 学号,课程号,成绩
From score as s1
Where 成绩> (select avg(成绩)
From score as s2
Where s1.课程号 = s2.课程号
Group by 课程号);
5、多表查询:多张表质检如何进行复杂查询,表的联结从而进行复杂分析。
表的加法 union 自动去重,不要去重复 union all。多表联结。
多种联结方式 都是以交叉联结为基础,在from中同时使用两张表,由于表名太长会影响sqL的可读性,所以使用as 对表取别名,方便使用。给学生表取别名a,给成绩表取别名b。使用列名时,为了方便区分这个列是哪个表的,会在列名前用**(表名.列名)格式。列名前面都加了别名。From子句中用inner join将连个表联结起来,这里的inner join表示联结方式是内联结**,选出同时存在两个表中的数据。From子句中关键词On 表示两个表是通过哪个列匹配产生关系的。On a.学号=b.学号,On 表示联结两个表的桥梁一样。
case 表达式 用于调节判断 case when else end 判断语句
-- 查询平均成绩大于85分的所有学生的学号,姓名,平均成绩
Select a.学号,a.姓名,avg(b.成绩) as 平均成绩
From student as a left join score as b
on a.学号=b.学号
group by a.学号
having avg(b.成绩)>85
-- 查找每门课程的及格人数和不及格人数
select 课程号,
sum(case when 成绩>=60 then 1 else 0 end) as 及格人数,
sum( case when 成绩<60 then 1 else 0 end) as 不及格人数
from score
group by 课程号
6、高级功能:通过窗口函数和聚合窗口函数解决topN和经典排名和组内查询问题
窗口函数原则上只能写在select子句中
partition子句是可以省略,省略就是不指定分组
-- 排名问题 窗口函数
select *,
rank() over (order by 成绩 desc) as ranking,
dense_rank() over (order by 成绩 desc) as dese_rank,
row_number() over (order by 成绩 desc) as row_num
from 班级表
-- 查找单科成绩高于该科目平均成绩
select*
from(select *,
avg(成绩) over (partition by 课程号) as 平均成绩
from score) as d
where 成绩>平均成绩
-- 查询各科成绩前两名的记录
select* from ( select *,
row_number() over (partition by 课程号
order by 成绩 desc) as ranking
from score) as b
where ranking <= 2
四、一句话总结
通过MYSQL的学习入门了数据库,总结是开始而不是结束,多实操多练习,每周做一次SQL笔试题,技能不练一定会忘记。