目前笔记参考内容:
书籍:《SQL必知必会》、《MySQL基础教程》
课程:《数据库系统》MOOC-哈工大-战得臣教师
课程:《MySQL8学习教程》哔哩哔哩
以及一些其他的课程和笔记
公众号:LearningTribe
为了后期让学习SQL的我们有一个集结的地方,方便大家交流沟通,我花时间建了一个公众号:LearningTribe,由于时间关系,目前还没怎么开始运营,预计四月中下旬开始运营,大家可以先关注一下,防止找不到部落。
说明:
我这里安装的是MySQL 8.0.19,我的笔记也只记录通用部分和MySQL的专属部分,至于其他DBMS的专属部分,等后面用到了再去补这方面的知识。
任何学习都是从入门到基础再到高级的,笔记的记录应该是不断完善的过程,这里的笔记我先以《SQL必知必会》的目录为框架进行记录,并对其进行补充,我虽然有一定的基础(本科软件工程),但我喜欢把笔记记录的尽量详细和完整,它会是一个很漫长的过程,但我会坚持下去。
我学习Python有一段时间了,最近才开始自学SQL,期间找了一些视频和书籍看,笔记也记录了一部分,但比较零零散散,这些零散的笔记我会汇总整理到当前的笔记中,所以才等到今天把笔记一点点的分享出来。
基本上对每个知识点我都写上了【我的理解】,不过我的水平很有限,对一些知识的理解可能不够完善,甚至错误,所以【我的理解】这一块大家就参考看一下,如果这块内容有错,灰常恳求大家指点出来,一起交流,一起加油,一起进步~奥里给!
个人信息:
我是去年的毕业生,今年考研失利,只能去B区,纠结一段时间后我选择去工作,等工作了再考。但我对工作不是很了解,虽然我以前也有过兼职、实习、工作经历,但现在要我选择一个明确的岗位,我实在是不知该如何选择。我期间查过的工作岗位有:机器学习、深度学习、NLP、Python开发、数据挖掘、爬虫、数据分析、产品经理等,在了解这些岗位的基本信息后,加上各种分析,我坚定了我的第一份岗位选择是:数据分析,所以我目前准备找的工作岗位是数据分析师实习生,我目前的学习规划也是按照大部分公司对数据分析师实习生的要求进行制定的,预计在四月中旬可以基本满足,到时候如果有公司看上我了我会来报喜的~
英文全称:DataBase Management System,简称DBMS。
维基百科:DBMS是为管理数据库而设计的电脑软件系统,一般具有存储、截取、安全保障、备份等基础功能。DBMS有很多种版本,不同版本对SQL语言都是支持的,但也存在一些变化。
定义:
本书:表(Table) 是某种特定类型数据的结构化清单。关键词:表是结构化的,里面存放的数据是同一种类型的。
我的理解:结合Excel中的表理解,Excel的sheet是很多列和行组成的方格,说明表是结构化的,每个表存放的整体数据都是特定含义的,而不是随意的把所有数据都放到一起,书中讲的“同一种类型”指的不是表中数据只能是char或者数值类型,而是说一个表中的数据是一类信息,比如说,表A保存的是顾客购买清单,那么就只能存放购买清单的数据,而不能存放生产商的信息,因为生产商信息应该单独放到生产商的表B中。数据库由一个或多个表组成,这点不要忘了,我们在说表的时候,一定清楚是在哪个数据库里面,因为一个DBMS可以管理多个数据库,所以对表的操作,必须先进入相应的数据库里面才可以。
表名:
模式(schema):
列column:
列也称字段,每列都有一个列名,也叫字段名。一个表由一个或多个列组成,一列中存储的数据属于一类,比如顾客表中,一列存放顾客的姓名,一列存放顾客的地址等。
之所以一个表table可以由多个列column组成,涉及到数据分解的思想,把数据合理的分解,然后存放到不同的列中,对我们后续的数据处理会很有帮助。
数据类型datatype:
每列都有一个特定的数据类型,不同列的数据类型可以不同。这里的数据类型就是我们平时理解的数据类型,但更为细分,比如数值型,可以是日期、金额等,也可以是文本、注释等。之所以每列都设置一个数据类型,是为了对列中存储的数据进行限制,可以更好的分类和优化数据。
不同DBMS在数据类型上会有所差异,比如同一数据类型但名字不同,同名数据类型在使用要求上又会有所不同等,这点要放在具体的情况中具体分析。
也常被称为记录record,但行是更准确的叫法。对照Excel中的表sheet理解,行就是一行数据。
我的理解:比如顾客表,顾客表里面包含顾客名、顾客地址信息,那么该表中每一行就是一个顾客的信息,包括顾客名和地址,如果把顾客名单独拿出来,就是一列column,地址信息一样也是一列。
定义:主键是一列(一组列),其值可以唯一的标识表中的每一行。
我的理解:单说主键指的是一列或一组列,但要说某一行的主键则指的是唯一标识该行的值,这个值可以由该行数据中的一个或多个组成,也可以是额外添加的值,总之是唯一的。比如,我们创建一个学生表,里面由学号列、学生姓名列、数学考试成绩列、英语考试成绩列、语文考试成绩列,因为学生的学号是唯一的,所以我们可以将学号这一列作为主键,如果没有学号呢,我们可以自己加一列,列中的数据需要唯一,这样也可以唯一标识学生。
本书:SQL的全称是Structured Query Language,即结构化查询语言。是数据库标准语言,几乎所有的数据库都支持SQL语言。
我的理解:更准确的说,SQL是数据库管理系统DBMS的标准语言。
这是对我们本书中使用到数据库实例进行简单的介绍,大致阅读一下,了解这个数据库是关于什么的,主要是图A-1的样例表关系图,这对我们理解后续的编程代码很有帮助,理解掌握才是最重要的,对一件事的分析思想很重要,至于具体的语言实现,可以通过多练来掌握。
第一步:打开workbench
我的MySQL版本是8.0.19,打开MySQL Workbench 8.0 CE,连接上我们的数据库,进入数据库工作台,如图:
存在些微差别,比如左边一栏可能不一样,因为我已经创建了别的database,还有中间的schema显示内容不一样等,都没有关系,只要你连接上数据库,并且进入到workbench就可以。
第二本:下载脚本
点进去之后,在网页下方,点击图中所选位置,即可开始下载。
我也打包好了,放在蓝奏云里面,关注公众号:LearningTribe,回复:附录A,即可获得下载链接。
下载的内容是一个压缩包,解压后,会看到三个文件:create.txt和populate.txt,以及一个说明README.pdf。
第三步:执行SQL脚本
具体步骤:
1、创建数据库:
点击之后,可以看到1,在2处输入数据库的名称tysql,你也可以输入别的名称,都一样,3就默认就可以了,然后Apply;因为我已经存在一个tysql数据库,这里我就用tysql2来代替;
出来一个弹窗,一样默认不变,Apply即可;然后又有一个弹出,等加载完毕,点击finish,如果你的电脑差不多,几乎看不到任何加载过程,所以没看到我说的加载过程也不用担心,没有提示错误就行,然后点击finish即可。
补充:这里说一下,当我们返回到工作台页面后,上图的1就会发现变化,变化的内容是名称改变。这个时候我们已经成功创建一个数据库了,如何选择我们的刚刚创建的数据呢?
2、执行我们的create.txt内容创建我们所需的表
解释:
3、验证是否创建成功
解释:1处就是执行的过程,2处是执行的结果,可以看到里面已经创建了五个表。
4、向表中导入数据
同理,和创建表一样(见步骤2),先选中数据库,然后点击3位置,复制文件populate.txt中的全部内容,粘贴到5中,然后6执行,没有报错即执行成功。这个时候就可以关闭MySQL Workbench了,因为《SQL必知必会》是在命令行窗口下执行SQL代码的。