一、常见数据库分类
(1)关系型数据库
采用关系模型组织数据的数据库,以行和列的形式存储数据,形成数据表,一组数据表组成了数据库
(2)非关系型数据库
非关系型数据库在严格意义上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等。
二、数据库常用功能
(1)表
数据表是数据库中存储数据的基本组成单位,例如用户信息表、订单表、采购表等。
(2)查询
查询是数据库中应用最多的对象之一,最常用的功能是根据指定条件从表中检索数据。
(查询实际上是一个固定化的筛选,它根据指定条件将表中的数据筛选出来,并以表的形式返回筛选结果)
三、常用SQL语句
1、select语句
SELECT 字段
FROM 表
WHERE 过滤行条件
GROUP BY 字段
HAVING 过滤组条件
ORDER BY 字段
为了提高速度、节省计算资源,如果只是查看数据表中的数据样例,了解数据结构,我们只需将前n条记录查询出来即可。如下:
SELECT 字段 FROM 表 LIMIT n
SELECT * FROM list LIMIT 3; // 查询list表前三条数据
2、create table 语句
用于创建新的数据表
CREATE TABLE 表名
(字段1 数据类型1,
... ...
字段n 数据类型n)
数据类型 | MySQL |
---|---|
字符型 | VARCHAR、CHAR、TEXT |
整数型 | INT、SMALLINT、BIGINT |
浮点型 | FLOAT、DOUBLE |
日期、时间型 | TIME、DATE、DATETIME、TIMESTAMP |
CREATE TABLE list
(ID INT,
name VARCHAR,
age INT,
birthday DATE)
3、select into 语句
用于将查询结果保存至指定的新数据表中,如指定的数据表已存在,将删除数据表中的原有数据,再保存查询结果。
注意:MySQL数据库不支持select into语句,SQL server支持该语句
MySQL写法:
CREATE TABLE 新表 AS SELECT 字段 FROM 数据源(表或查询)
例如:
CREATE TABLE list_2 AS //保存至新数据库表“list_2”中 SELECT name FROM list; //查询数据表“list”中所有的姓名
SQL server写法:
SELECT 字段 INTO 新表 FROM 数据源(表或查询)
例如:
SELET name INTO list_2 FROM list
4、insert into 语句
用于将查询结果追加插入指定的数据表,要求指定的数据表必须存在。
INSERT INTO 表
SELECT 字段
FROM 数据源(表或查询)
例如:
INSERT INTO list //将数据插入数据表“list”中
SELECT name, age FROM list_new //查询数据表list_new的数据
四、SQL语句注意事项
1、SQL语句中,“*”代表选择选定表格中所有字段,并且按照它们在数据库中的固定顺序来显示。数据表比较大时,尽量用具体的字段代表“*”,以免查询到过多用不到的字段,从而提高查询速度。
2、SQL语句中,SELECT、FROM等关键字使用大写或者小写形式均可。在编写SQL语句时,建议尽量统一关键字的大小写。例如,以大写字母的形式输入关键字,以小写的形式输入表名或字段,这样SQL语句看起来会更加清了。要求在编写SQL语句时,不能将这些关键字用作字段名、表名。
3、SQL语句中,关键字与表名、字段名、运算符之间需要使用空格分隔,如果SQL语句较长,可以使用换行符换行。
4、SQL语句中,字段或参数之间用逗号分隔。SQL语句结束时。在结尾处添加分号,以表示一条语句结束。(SELECT name, age FROM list;)
5、SQL语句中,如果参数为字符型,name需要在其两端加上单引号或者双引号,数值型参数无须使用引号。(SELECT * FROM list WHERE name='小黑' OR age<17)
6、对于SQL语句,如果表名、字段名中存在空格、"/"、"\"等特殊字符,在MYSQL数据库中使用单引号或反引号,将有特殊字符的表名或字段名引起来。(为了SQL语句能够顺利运行,尽量避免表名、字段名出现特殊字符。)
7、SQL语句中,如果函数参数或查询条件为日期和时间,在MYSQL数据库中需要在两端加上单引号或双引号。(SELECT * FROM 表 WHERE 日期='2022/10/1')
8、SQL语句中符号需要在输入法的英文半角状态下输入的符号,否则SQL语句将无法运行。
9、编写SQL语句时,应尽量优化代码以提升查询速度。下面时SQL语句中各个子句的执行顺序。(顺序从上往下)
FROM 表
WHERE 过滤行条件
GROUP BY 字段
HAVING 过滤组条件
SELECT 字段
ORDER BY 字段
从SQL语句的执行顺序得知,可以先使用WHERE子句过滤出需要的数据,尽可能减小查询的数据规模,以提升查询速度。
其次,在WHERE子句中,条件表达式应尽量避免使用 "!="、"<>"或OR、LIKE等,以提升查询速度。
最后,应尽量避免在WHERE子句中对字段进行函数操作,以提升查询速度。
10、SQL语句中,关键字AS用于为表或字段取别名,特别是在多表查询中,关键字AS经常被使用到。编写SQL语句时,关键字AS可以省略,省略后需要将表名、字段名和别名用空格分隔开。
SELECT name AS a, age AS b
FROM list AS c;
SELECT name a, age b
FROM list c;
//上面两条SQL语句等价
PS:表的别名不能与该数据库的其他表同名。同理,字段的别名不能与该表的其他字段同名。
五、数据处理
数据处理,即根据数据分析的目的,对收集到的数据进行加工、整理,使数据保持准确性、一致性和有效性,以形成符合数据分析要求的样式,也就是数据清单。
数据处理是数据分析前必不可少的工作,并且在整个数据分析过程中占据了大部分的工作量。
常用的数据处理方法,主要包括数据导入/导出、数据清洗、数据转换、数据抽取、数据合并、数据计算等几大类。
5.1 数据导入/导出
在MYSQL可视化工具中可以之间拖拽SQL文件到查询空白处,点击执行即可导入数据库。找到菜单中的导出即可导出SQL文件。
5.2 数据清洗
在日常工作中,受系统BUG或人为等原因影响,难免会出现数据错误、数据缺失、数据重复等问题。具有此类问题的数据通常被称为“脏数据”。我们可以按照一定的规律将“脏数据”处理“干净”,这个操作被称为数据清洗。
数据清洗的目的就是将原始数据转化为可以进行分析的数据,使数据保持准确性、一致性、有效性。
进行数据清洗的常见方法有数据排序、重复数据处理、空格数据处理、缺失数据处理等。
1、数据排序
数据排序是指按照一定顺序对数据进行排列,以便研究者能够通过浏览数据发现一些明显的特征、规律,找到解决问题的线索。除此之外,排序还有助于对数据进行检查、纠错,以及为重新归类或分组等提供方便。
在SQL语句中,ORDER BY子句可用于根据指定的字段对数据进行排序,其用法如下所示。
ORDER BY 字段 ASC/DESC
ASC(或省略):升序(从小到大)
DESC:降序(从大到小)
SELECT * FROM list
ORDER BY age ASC, birthdate DESC
2、重复数据处理
在日常的数据分析工作中,数据表中会存在各种各样的重复数据,在有些情况下,允许重复数据存在,而有时候需要将这些重复数据删除
重复数据删除,就是将数据中重复、多余的数据删除,以保证数据的唯一性,也称数据去重。
(1)关键字DISTINCT
在SQL语句中,第一个数据去重方法是使用关键字DISTINCT,它用于返回不同的唯一值,也就是将数据表中的重复数据删除。
SELECT DISTINCT 字段
FROM 表
DISTINCT需要放在所有字段的前面。DISTINCT其实是对后面所有字段的组合去重,也就是所有字段的值的组合如果不唯一,将删除多余重复值,只保留唯一值。
SELECT DISTINCT name, age, birthdate
FROM list_1
(2)GROUP BY子句
在SQL语句中,第二个数据去重方法是使用GROUP BY子句,它根据指定字段对数据进行分组,分组后保留该组的唯一值,也就实现了数据去重的效果。
SELECT 字段1,字段n
FROM 表
GROUP BY 字段1,字段n
GROUP BY子句后面的所有字段,要依次出现在SELECT的后面。
GROUP BY子句不能使用字段的别名,因为SELECT在GROUP BY之后执行,别名还未生效。
SELECT name, age, birthdate
FROM list_1
GROUP BY name, age, birthdate
3、空格数据处理
空格数据,是指字符型数据的前面或者后面存在的空格。由于系统BUG或人为等原因,空格数据在日常工作中经常出现。
(1)Trim函数
在SQL语句中,可以使用Trim函数删除字符型字段数据前后的空格。
需要注意的是Trim函数对字符串中间的空格不做处理,例如“Jack Wang”这个姓名中间的空格,是用来分隔姓氏跟名字的,属于正常的用法。
SELECT Trim(name) AS name_new, age, birthdate
FROM list_2
(2)Replace函数
在SQL语句中,还可以使用Replace函数替换掉字符型字段数据中的空格。
express | 包含要替换的子字符串的字符串或字段 |
find | 要查找的子字符串,需要使用双引号引起来 |
replace | 替换子字符串,需要使用双引号引起来 |
Replace函数可以轻松解决Trim函数无法去除字符串中间空格的问题。根据实际需求选择相应函数进行空格处理即可。
SELECT Replace(name, " ", "") AS name_new, age, birthdate
FROM list_2
4、缺失数据处理
缺失数据也被称为缺省值,是指由于系统BUG或人为等原因,造成数据表中某些字段的值缺少的情况。
缺失值常见的表现形式有NULL和空值两种。空值可以使用英文单引号''或英文双引号""来表示。对于空值,可以使用运算符“=”,“!=”,“<>”判断;而对于NULL,直接使用运算符IS NULL、IS NOT NULL进行判断即可。
常用的缺失值处理方法有两种。
第一种是只在使用有缺失值的字段时,使用WHERE子句将字段中的缺失值过滤掉,而不是简单粗暴地将含有缺失值的数据记录都过滤掉或删除掉,那样会造成数据的浪费。
第二种是在有明确的填充规则时,使用某个值填充缺失值。例如,如果有出生日期信息,可以重新计算年龄并填充,如果没有出生日期信息或其他明确规则,则不建议填充任何值。
(1)If函数
在MYSQL数据库中,可以使用If函数判断字段中是否存在缺失值,并使用某个值填充缺失值。
例如:name为NULL时,填充为“无名氏”,新增一列列名为name_new
SELECT ID, name, age,birthdate,
If(name IS NULL, '无名氏', name) AS name_new
FROM list_3;
(2)Ifnull函数
在MYSQL数据库中,可以使用Ifnull函数判断字段值是否为NULL并使用某个值替换NULL。
expr1 | 要判断的值或表达式,如果不为NULL,则返回expr1 |
expr2 | expr1如果为NULL,则返回的值或表达式 |
SELECT ID, name, age, birthdate,
Ifnull(name, '无名氏') AS name_new
FROM list_3
(3)Coalesce函数
在MYSQL数据库中,还可以使用Coalesce函数判断字段值是否为NULL并使用某个值替换NULL。
Coalesce函数用于返回参数列表中的第一个非NULL参数,如果所有参数都为NULL,则返回NULL。如果Coalesce函数输入参数的数量为2时,则作用于Ifnull函数相同。
SELECT ID, name, age, birthdate,
Coalesce(name, '无名氏') AS name_new
FROM list_3
PS:在MYSQL数据库中,还可以使用CASE语句判断字段中是否存在缺失值并使用某个值填充缺失值。
5.3 数据抽取
数据抽取,也称数据拆分,是指抽取原数据库表中的某些字段、记录的部分信息,形成新字段、新纪录。常用的数据抽取方法包括字段拆分和记录抽取。
1、字段拆分
字段拆分,就是指抽取某一字段中的部分信息,形成新字段。
例如:身份证号码包含了很多信息,例如持证人所在地区、出生日期、性别等,将它们从身份证号码字段中抽取出来,可以得到新字段,这样就可以做相应的分析了,如用户地区分布、用户出生年份分布、用户性别构成等,甚至可以根据出生日期做进一步的处理,得到年龄、星座、生肖等新字段。