SQL必知必会-笔记(完善版):第1课

SQL必知必会

目前笔记参考内容:

书籍:《SQL必知必会》、《MySQL基础教程》

课程:《数据库系统》MOOC-哈工大-战得臣教师

课程:《MySQL8学习教程》哔哩哔哩

以及一些其他的课程和笔记
公众号:LearningTribe

为了后期让学习SQL的我们有一个集结的地方,方便大家交流沟通,我花时间建了一个公众号:LearningTribe,由于时间关系,目前还没怎么开始运营,预计四月中下旬开始运营,大家可以先关注一下,防止找不到部落。


说明

我这里安装的是MySQL 8.0.19,我的笔记也只记录通用部分和MySQL的专属部分,至于其他DBMS的专属部分,等后面用到了再去补这方面的知识。

任何学习都是从入门到基础再到高级的,笔记的记录应该是不断完善的过程,这里的笔记我先以《SQL必知必会》的目录为框架进行记录,并对其进行补充,我虽然有一定的基础(本科软件工程),但我喜欢把笔记记录的尽量详细和完整,它会是一个很漫长的过程,但我会坚持下去。

我学习Python有一段时间了,最近才开始自学SQL,期间找了一些视频和书籍看,笔记也记录了一部分,但比较零零散散,这些零散的笔记我会汇总整理到当前的笔记中,所以才等到今天把笔记一点点的分享出来。

基本上对每个知识点我都写上了【我的理解】,不过我的水平很有限,对一些知识的理解可能不够完善,甚至错误,所以【我的理解】这一块大家就参考看一下,如果这块内容有错,灰常恳求大家指点出来,一起交流,一起加油,一起进步~奥里给!

个人信息:

我是去年的毕业生,今年考研失利,只能去B区,纠结一段时间后我选择去工作,等工作了再考。但我对工作不是很了解,虽然我以前也有过兼职、实习、工作经历,但现在要我选择一个明确的岗位,我实在是不知该如何选择。我期间查过的工作岗位有:机器学习、深度学习、NLP、Python开发、数据挖掘、爬虫、数据分析、产品经理等,在了解这些岗位的基本信息后,加上各种分析,我坚定了我的第一份岗位选择是:数据分析,所以我目前准备找的工作岗位是数据分析师实习生,我目前的学习规划也是按照大部分公司对数据分析师实习生的要求进行制定的,预计在四月中旬可以基本满足,到时候如果有公司看上我了我会来报喜的~


一、了解数据库

1.1 数据库基础

1.1.1 数据库

  • 本书:数据库是一个以某种有组织的方式存储的数据集合,是保存有组织数据的容器。关键字是:数据是有组织的、数据库是集合是容器。英文全称Database,简称DB。
  • 其他定义:数据库是按照一定的结构来组织、存储和管理数据的仓库,通常是由一个或多个文件组成的。关键字:组织、存储、管理。
  • *:数据库DataBase又称数据库管理系统DBMS,简而言之是电子化的文件柜——存储电子文件的场所,用户可以进行增删改查等操作。一个数据库由多个表Tables构成。
  • 我的理解:数据库,顾名思义,是个数据的"仓库",里面的数据是有组织的,仓库是存储这些数据的,可以起到组织、管理的作用,一个数据库有多个表Tables组成,表内的数据是有组织的,表与表之间也是有关联的。对比Excel理解,一个数据库就是一个工作簿,数据库的表Table相当于Excel的sheet表,同数据库,一个工作簿可以创建多个sheet。
  • (补充)数据:指未经过处理的原始记录;

(补充)数据库管理系统:

英文全称:DataBase Management System,简称DBMS。

*:DBMS是为管理数据库而设计的电脑软件系统,一般具有存储、截取、安全保障、备份等基础功能。DBMS有很多种版本,不同版本对SQL语言都是支持的,但也存在一些变化。

注意1:

  • 在*中,数据库又被视为数据库管理系统,这是因为通常大家都这么认为,因为通常我们对数据库的操作都是建立在DBMS上,但也要清楚DB和DBMS是不一样的。
  • DBMS数据库管理系统,是数据库系统的一部分,DBMS是对数据库管理系统的统称,其实DBMS有很多种,不同的DBMS又有不同的名字,比如我们所熟悉的Oracle和MySQL都是数据库管理系统,严格来说并不是数据库DB,但我们通常所说的数据库就是指这些我们常见常用的DBMS。
  • SQL全称是Structured Query Language,即结构化查询语言,是数据库管理系统的标准语言,基本上所有的DBMS都支持SQL,而且这些数据库管理系统的官方语言都是在SQL的基础上进行部分修改的。这本书对SQL在不同的DBMS中的变化进行了说明。

1.1.2 表

定义:

本书:表(Table) 是某种特定类型数据的结构化清单。关键词:表是结构化的,里面存放的数据是同一种类型的。

我的理解:结合Excel中的表理解,Excel的sheet是很多列和行组成的方格,说明表是结构化的,每个表存放的整体数据都是特定含义的,而不是随意的把所有数据都放到一起,书中讲的“同一种类型”指的不是表中数据只能是char或者数值类型,而是说一个表中的数据是一类信息,比如说,表A保存的是顾客购买清单,那么就只能存放购买清单的数据,而不能存放生产商的信息,因为生产商信息应该单独放到生产商的表B中。数据库由一个或多个表组成,这点不要忘了,我们在说表的时候,一定清楚是在哪个数据库里面,因为一个DBMS可以管理多个数据库,所以对表的操作,必须先进入相应的数据库里面才可以。

表名:

  • 唯一性:唯一性指的是在同一个数据库中,表名不能相同,不同数据库中表名可以相同;

模式(schema):

  • 书中说表具有一些特性,这些特性就是表的基本信息,这些基本信息的统称就是所谓的模式schema。
  • 补充:在MySQL8.0.19版本中,schema是数据库,而不是专属描述表table的特性,我们新建一个库就是create a new schema,关于这点的变化,我目前还没有弄清楚。

1.1.3 列和数据类型

列column:

列也称字段,每列都有一个列名,也叫字段名。一个表由一个或多个列组成,一列中存储的数据属于一类,比如顾客表中,一列存放顾客的姓名,一列存放顾客的地址等。

之所以一个表table可以由多个列column组成,涉及到数据分解的思想,把数据合理的分解,然后存放到不同的列中,对我们后续的数据处理会很有帮助。

数据类型datatype:

每列都有一个特定的数据类型,不同列的数据类型可以不同。这里的数据类型就是我们平时理解的数据类型,但更为细分,比如数值型,可以是日期、金额等,也可以是文本、注释等。之所以每列都设置一个数据类型,是为了对列中存储的数据进行限制,可以更好的分类和优化数据。

不同DBMS在数据类型上会有所差异,比如同一数据类型但名字不同,同名数据类型在使用要求上又会有所不同等,这点要放在具体的情况中具体分析。

1.1.4 行row

也常被称为记录record,但行是更准确的叫法。对照Excel中的表sheet理解,行就是一行数据。

我的理解:比如顾客表,顾客表里面包含顾客名、顾客地址信息,那么该表中每一行就是一个顾客的信息,包括顾客名和地址,如果把顾客名单独拿出来,就是一列column,地址信息一样也是一列。

1.1.5 主键

定义:主键是一列(一组列),其值可以唯一的标识表中的每一行。

我的理解:单说主键指的是一列或一组列,但要说某一行的主键则指的是唯一标识该行的值,这个值可以由该行数据中的一个或多个组成,也可以是额外添加的值,总之是唯一的。比如,我们创建一个学生表,里面由学号列、学生姓名列、数学考试成绩列、英语考试成绩列、语文考试成绩列,因为学生的学号是唯一的,所以我们可以将学号这一列作为主键,如果没有学号呢,我们可以自己加一列,列中的数据需要唯一,这样也可以唯一标识学生。

1.2 什么是SQL

本书:SQL的全称是Structured Query Language,即结构化查询语言。是数据库标准语言,几乎所有的数据库都支持SQL语言。

我的理解:更准确的说,SQL是数据库管理系统DBMS的标准语言。

1.3 动手实践

附录A:样例本脚本(实际操作步骤)

这是对我们本书中使用到数据库实例进行简单的介绍,大致阅读一下,了解这个数据库是关于什么的,主要是图A-1的样例表关系图,这对我们理解后续的编程代码很有帮助,理解掌握才是最重要的,对一件事的分析思想很重要,至于具体的语言实现,可以通过多练来掌握。

第一步:打开workbench

我的MySQL版本是8.0.19,打开MySQL Workbench 8.0 CE,连接上我们的数据库,进入数据库工作台,如图:
SQL必知必会-笔记(完善版):第1课

存在些微差别,比如左边一栏可能不一样,因为我已经创建了别的database,还有中间的schema显示内容不一样等,都没有关系,只要你连接上数据库,并且进入到workbench就可以。

第二本:下载脚本

点进去之后,在网页下方,点击图中所选位置,即可开始下载。

SQL必知必会-笔记(完善版):第1课

我也打包好了,放在蓝奏云里面,关注公众号:LearningTribe,回复:附录A,即可获得下载链接。

下载的内容是一个压缩包,解压后,会看到三个文件:create.txt和populate.txt,以及一个说明README.pdf。

SQL必知必会-笔记(完善版):第1课

第三步:执行SQL脚本

具体步骤:

1、创建数据库:

  • Create a new schema in the connected server,如图所示。解释:create.txt文件是我们的创建各种表的代码,创建表之前我们需要先创建一个数据库来存放这些表。

SQL必知必会-笔记(完善版):第1课

SQL必知必会-笔记(完善版):第1课

  • 点击之后,可以看到1,在2处输入数据库的名称tysql,你也可以输入别的名称,都一样,3就默认就可以了,然后Apply;因为我已经存在一个tysql数据库,这里我就用tysql2来代替;

  • 出来一个弹窗,一样默认不变,Apply即可;然后又有一个弹出,等加载完毕,点击finish,如果你的电脑差不多,几乎看不到任何加载过程,所以没看到我说的加载过程也不用担心,没有提示错误就行,然后点击finish即可。

  • 补充:这里说一下,当我们返回到工作台页面后,上图的1就会发现变化,变化的内容是名称改变。这个时候我们已经成功创建一个数据库了,如何选择我们的刚刚创建的数据呢?

    SQL必知必会-笔记(完善版):第1课
    在Schemas中,可以看到我们刚刚创建的tysql2,然后双击即可选中它,可以看到它的字体加粗了。

2、执行我们的create.txt内容创建我们所需的表

SQL必知必会-笔记(完善版):第1课

解释:

  • 首先要选中我们刚刚创建的数据库,如何选中在上一步中已经说明,选中后有两个提示,一个是1处的数据库名加粗,一个是2处显示当前所选的数据库名;必须要选中刚刚创建的数据库。
  • 点击3产生4,然后打开create.txt文件,复制里面的全部内容,粘贴到5处,点击6,就会开始执行里面的命令。这些命令的含义是创建5个表到tysql2数据库中。7的下方是显示我们的执行结果。没有报错就是全部执行成功,我这边全部执行成功。鼠标移到1处的空白处,右击,选择Refresh All。

3、验证是否创建成功

SQL必知必会-笔记(完善版):第1课

解释:1处就是执行的过程,2处是执行的结果,可以看到里面已经创建了五个表。

4、向表中导入数据

同理,和创建表一样(见步骤2),先选中数据库,然后点击3位置,复制文件populate.txt中的全部内容,粘贴到5中,然后6执行,没有报错即执行成功。这个时候就可以关闭MySQL Workbench了,因为《SQL必知必会》是在命令行窗口下执行SQL代码的。

附录B:流行的应用程序

  • SQL是语言,不是数据库,也不是DBMS数据库管理系统,更不是数据库系统,我们学习的这本书《SQL必知必会》是学习SQL语言。
  • 我使用的是MySQL8.0.19版本,是当前MySQL的最新版本,这个版本跟以前的5版本有一些不一样的地方,让我在学习过程中遇到了很多坑,这些我都会在笔记中说明,对我印象最深的坑是:8版本的字符集编码由原来的utf8变成了utf8mb4。
  • 附录B也指出建议我们强烈安装workbench,刚刚我们使用的就是这个工作台。
  • 在命令行窗口登录MySQL,输入命令:mysql -u root -p 回车,然后输入密码即可,-u就是用户user,-p就是密码password;
  • SQL语句必须以英文分号;或\g结尾,如果不输入,则按下enter键后,仍然是一个带输入命令的提示符->,如果使用了引号,比如是成对使用,如果缺少一个,提示符就会变成’>或者">,表示缺少一个引号;一般来说,单行语句不加结束符也会执行,多行语句必须加,但最好还是都加上。
  • 退出MySQL命令,常用的有\q或者exit或者quit

1.4 小结

  • 数据库的定义,什么是表,表里面有什么,表和数据库的关系,什么是行和列,主键又是什么,SQL是什么,又补充了DBMS,以及我们需要注意哪些易混点。第一章都是一些基础理论,理解然后能用自己的话描述即可,不用死记硬背,对一个新概念的理解主要经过:理解-区分-命名-表达