SQL数据分析(简单版)

一、常见数据库分类

(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数据库常用数据类型
数据类型 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函数替换掉字符型字段数据中的空格

Replace函数(express, find, 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

Ifnull(expr1, expr2)
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、字段拆分

字段拆分,就是指抽取某一字段中的部分信息,形成新字段

例如:身份证号码包含了很多信息,例如持证人所在地区、出生日期、性别等,将它们从身份证号码字段中抽取出来,可以得到新字段,这样就可以做相应的分析了,如用户地区分布、用户出生年份分布、用户性别构成等,甚至可以根据出生日期做进一步的处理,得到年龄、星座、生肖等新字段。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值