数据分析基础:从 SQL 到可视化,一文搞懂核心知识点

📌 本文系统梳理数据分析所需的基础技能,涵盖 MySQL 核心语法(DDL/DML/DQL)、多表关联查询、窗口函数、常用函数,以及 FineBI 可视化报表入门。适合数据分析初学者收藏参考。


📑 目录


一、SQL 语法基础

1.1 数据库概念

数据库是存储和管理数据的系统,核心操作即 CRUD:增(Create)、删(Delete)、改(Update)、查(Retrieve)

数据库主要分为两大类:

类型 说明 常见产品
关系型数据库(SQL) 存储结构化的行列数据 MySQL、Oracle、PostgreSQL、SQLite
非关系型数据库(NoSQL) 存储非结构化数据 Redis(键值对)、MongoDB(文档)、HBase(列式)、Neo4j(图)

1.2 MySQL 基础

MySQL 是目前最流行的关系型数据库管理系统(RDBMS),具有以下特点:

  • 采用 C/S 架构(Client 客户端 / Server 服务端)
  • 使用标准的 SQL 结构化查询语言

数据库连接方式:

# 终端连接
mysql -h 服务端IP地址 -P 端口 -u 用户名 -p 密码

# 默认值
# 服务端地址:127.0.0.1 或 localhost
# 端口:3306

此外,也可以通过 PyCharm 等 IDE 的数据库工具进行可视化连接。

1.3 SQL 语句分类

分类 全称 作用
DDL Data Definition Language 数据库/数据表/字段的增删改查
DML Data Manipulation Language 表记录的增删改
DQL Data Query Language 表记录的查询
DCL Data Control Language 访问权限、安全、用户管理

1.4 SQL 基础语法规则

-- SQL 语句以分号 ; 结尾
-- SQL 语句不区分大小写

-- 注释方式
/* 多行注释 */
-- 单行注释(推荐)
# 单行注释(MySQL 特有)

⚠️ 注意事项:

  • SQL 语句中的标点符号必须使用英文符号
  • 关键字不建议用作库名、表名或字段名

二、DDL — 数据定义语言

2.1 数据库操作

-- 增:创建数据库
CREATE DATABASE [IF NOT EXISTS] 数据库名 [CHARSET utf8mb4];

-- 删:删除数据库
DROP DATABASE 数据库名;

-- 改:修改数据库
ALTER DATABASE 数据库名 ...;

-- 查:查看所有数据库
SHOW DATABASES;

-- 查看某个数据库的创建信息
SHOW CREATE DATABASE 数据库名;

-- 切换/使用数据库
USE 数据库名;

2.2 数据表操作

-- 增:创建数据表
CREATE TABLE 表名 (
    字段名1 数据类型 [约束],
    字段名2 数据类型 [约束],
    ...
);

-- 删:删除数据表
DROP TABLE 表名;

-- 改:重命名数据表
RENAME TABLE 旧表名 TO 新表名;

-- 查:查看所有表
SHOW TABLES;

-- 查看表结构
DESC 表名;

2.3 字段操作

-- 增:添加字段
ALTER TABLE 表名 ADD 字段名 数据类型 [约束];

-- 改:修改字段
ALTER TABLE 表名 CHANGE 旧字段 新字段 数据类型 [约束];

-- 删:删除字段
ALTER TABLE 表名 DROP 字段名;

2.4 数据类型与约束

常用数据类型:

类型 关键字 说明
整型 TINYINTINT 整数
字符串 VARCHAR(n)CHAR(n) 可变/固定长度
小数 FLOATDECIMAL 浮点/精确(金融用 DECIMAL)
日期 DATEDATETIME 年月日 / 年月日时分秒

常用约束:

约束 关键字 说明
主键 PRIMARY KEY 唯一、非空,一张表只有一个,可配合 AUTO_INCREMENT 自增
唯一 UNIQUE 字段值不能重复
非空 NOT NULL 必须填值
默认值 DEFAULT 不指定时自动填入默认值

三、DML — 数据操作语言

DML 负责表记录的增、删、改操作:

-- 增:插入数据
INSERT INTO 表名 (字段1, 字段2, ...) VALUES (1,2, ...), (3,4, ...);

-- 删:删除数据(⚠️ 一般需要加 WHERE 条件!)
DELETE FROM 表名 WHERE 条件语句;

-- 改:更新数据(⚠️ 一般需要加 WHERE 条件!)
UPDATE 表名 SET 字段1=1, 字段2=2, ... WHERE 条件语句;

🔴 重要提醒: DELETEUPDATE 操作务必加上 WHERE 条件,否则会操作整张表的所有数据!


四、DQL — 数据查询语言(重点)

DQL 是数据分析中最核心的部分,分为单表查询和多表查询。

4.1 单表查询

基础查询
-- 查询所有字段
SELECT * FROM 表名;

-- 查询指定字段
SELECT 字段1, 字段2 FROM 表名;

-- 去重查询
SELECT DISTINCT 字段 FROM 表名;

-- 起别名(AS 可省略)
SELECT 字段名 AS 别名 FROM 表名 AS 表别名;
条件查询(WHERE)
SELECT * FROM 表名 WHERE 条件语句;

运算符速查:

类别 运算符
比较运算 =><>=<=!=<>
逻辑运算 AND(交集)、OR(并集)、NOT(取反)
范围运算 BETWEEN 值1 AND 值2(闭区间)
离散匹配 IN (值1, 值2, ...)
模糊匹配 LIKE% 匹配任意多个字符,_ 匹配一个字符)
空值判断 IS NULL / IS NOT NULL
排序查询(ORDER BY)
-- 升序(默认,ASC 可省略)
SELECT * FROM 表名 ORDER BY 字段 ASC;

-- 降序
SELECT * FROM 表名 ORDER BY 字段 DESC;

-- 多字段排序
SELECT * FROM 表名 ORDER BY 字段1 DESC, 字段2 ASC;
聚合查询
SELECT COUNT(字段), SUM(字段), MAX(字段), MIN(字段), AVG(字段) FROM 表名;

💡 聚合函数会自动忽略 NULL 值

分组查询(GROUP BY)
SELECT 分组字段, 聚合函数(聚合字段)
FROM 表名
[WHERE 非聚合条件]
GROUP BY 分组字段
HAVING 聚合条件;
  • WHERE:分组过滤,不能对聚合结果过滤
  • HAVING:分组过滤,可对聚合结果过滤
分页查询(LIMIT)
-- 语法:LIMIT m, n(跳过 m 条,取 n 条)
SELECT * FROM 表名 ORDER BY 字段 LIMIT m, n;

-- TopK:查询前 K 条
SELECT * FROM 表名 ORDER BY 字段 DESC LIMIT K;

-- 分页:第 page 页,每页 n 条
-- m = (page - 1) * n
SELECT * FROM 表名 ORDER BY 字段 LIMIT (page-1)*n, n;
📌 SQL 语句的书写与执行顺序

书写顺序:

SELECT → DISTINCT → FROM → WHERE → GROUP BY → HAVING → ORDER BY → LIMIT

执行顺序:

FROM → WHERE → GROUP BY → 聚合函数 → HAVING → SELECT → DISTINCT → ORDER BY → LIMIT

理解执行顺序对排查 SQL 问题至关重要!


4.2 多表查询

表的关联关系
关系 说明 示例
一对一 两张表一一对应 用户信息 ↔ 证件
一对多 一对应多 类别 → 商品
多对多 通过中间表转换为两个一对多 学生 ↔ 课程
外键约束
-- 添加外键
ALTER TABLE 从表 ADD [CONSTRAINT 外键名] FOREIGN KEY (外键字段) REFERENCES 主表(主键);

-- 删除外键
ALTER TABLE 从表 DROP FOREIGN KEY 外键名;
ALTER TABLE 从表 DROP INDEX 外键索引名;

💡 实际开发中,很少直接使用外键约束,而是从代码层面维护表之间的关系

关联查询

① 交叉连接(笛卡尔积)

SELECT * FROM 左表 CROSS JOIN 右表;
-- 简写
SELECT * FROM 左表, 右表;

⚠️ 结果行数 = 左表行数 × 右表行数,一般不直接使用。

② 内连接(INNER JOIN)

取两表关联数据的交集

SELECT * FROM 左表 INNER JOIN 右表 ON 关联条件;

③ 外连接

-- 左外连接:左表全部 + 右表匹配部分
SELECT * FROM 左表 LEFT JOIN 右表 ON 关联条件;

-- 右外连接:右表全部 + 左表匹配部分
SELECT * FROM 左表 RIGHT JOIN 右表 ON 关联条件;

-- 全外连接(MySQL 不支持 FULL JOIN,用 UNION 实现)
SELECT * FROM 左表 LEFT JOIN 右表 ON 条件
UNION
SELECT * FROM 左表 RIGHT JOIN 右表 ON 条件;

💡 推荐优先使用 LEFT JOIN,调换表顺序即可实现 RIGHT JOIN 的效果。

④ 自连接

左表和右表是同一张表,通过别名区分:

SELECT a.*, b.*
FROM 表名 a
INNER JOIN 表名 b ON a.字段 = b.字段;

4.3 子查询

两个 SELECT 嵌套,外层依赖内层:

-- 子查询作为 WHERE 条件
SELECT * FROM 表名 WHERE 字段 IN (SELECT 字段 FROM 另一表);

-- 子查询作为临时表
SELECT * FROM (SELECT ... FROM 表名) AS 临时表;

-- 子查询作为 SELECT 字段
SELECT (SELECT 字段 FROM 另一表 WHERE 条件) AS 别名 FROM 表名;

五、常用函数速查

5.1 普通函数

类别 函数 说明
聚合 COUNT / SUM / MAX / MIN / AVG 统计聚合
数值 CEIL / ROUND 向上取整 / 四舍五入
字符串 LENGTH / REPLACE / CONCAT / TRIM 长度 / 替换 / 拼接 / 去空格
时间 NOW() / YEAR / MONTH / DAY / WEEKDAY 当前时间 / 提取时间部分
时间 DATE_FORMAT / TIMESTAMPDIFF 格式化 / 时间间隔
判断 IFNULL / IF / CASE WHEN 空值判断 / 单条件 / 多条件

CASE WHEN 示例:

SELECT
    CASE
        WHEN score >= 90 THEN '优秀'
        WHEN score >= 60 THEN '及格'
        ELSE '不及格'
    END AS grade
FROM student;

5.2 窗口函数(进阶重点)

窗口函数对 OVER() 中的分组数据进行广播处理,实现每行数据与分组数据一一对应。

SELECT 窗口函数(字段) OVER(PARTITION BY 分区字段 ORDER BY 排序字段) AS 别名
FROM 表名;

📌 PARTITION BYGROUP BY 的区别:

  • GROUP BY:多进一出(分组聚合)
  • PARTITION BY:一进一出(保留每行明细)

常用窗口函数:

函数 说明 示例场景
ROW_NUMBER() 连续唯一行号,不重复 排名编号
RANK() 有并列时序号重复但不连续 成绩排名
DENSE_RANK() 有并列时序号重复且连续 紧凑排名
SUM() OVER(ORDER BY) 累计求和 累计销售额
LAG(字段, N, M) 取当前行前第 N 行的值 环比计算
LEAD(字段, N, M) 取当前行后第 N 行的值 同比计算
NTILE(X) 均匀分成 X 组 分桶分析

排名示例:

SELECT
    name,
    score,
    ROW_NUMBER() OVER(ORDER BY score DESC) AS row_num,
    RANK() OVER(ORDER BY score DESC) AS rank_num,
    DENSE_RANK() OVER(ORDER BY score DESC) AS dense_rank_num
FROM student;

5.3 CTE 公用表表达式

WITH 定义临时结果集,提高 SQL 可读性:

WITH 临时表 AS (
    SELECT ... FROM 表名 WHERE 条件
)
SELECT * FROM 临时表;

六、FineBI 可视化入门

什么是 BI?

BI(Business Intelligence,商业智能) 是一套完整的解决方案,帮助企业管理者用数据驱动决策。

FineBI 是一款数据分析可视化工具,采用 B/S 架构(浏览器 / 服务器),同类工具还有 PowerBI、Tableau 等。

报表制作流程

准备数据 → 创建仪表盘 → 增加组件 → 数据分析可视化

两个核心概念

概念 说明
维度 描述事件的角度(如地区、时间、类别)
指标 量化业务数据(如销售额、用户数、转化率)

常用图表类型

分析场景 推荐图表
对比分析 柱状图、词云图
占比分析 饼图
趋势分析 折线图
分布分析 地图
钻取分析 仪表盘联动

报表制作完成后,支持分享报表文件分享报表链接给团队成员。


七、总结

本文覆盖了数据分析入门的核心知识体系:

模块 核心内容 掌握程度
DDL 库表字段的增删改查 了解
DML 数据的增删改 熟悉
DQL 单表 条件、排序、聚合、分组、分页 熟练掌握
DQL 多表 内连接、外连接、自连接、子查询 熟悉
窗口函数 排名、累计、环比、分桶 掌握
FineBI 维度指标、可视化图表 了解

🎯 学习建议: SQL 是数据分析的基本功,建议多动手练习。窗口函数是从"会写 SQL"到"写好 SQL"的分水岭,务必重点掌握。


如果这篇文章对你有帮助,欢迎点赞 👍 收藏 ⭐ 评论 💬 支持一下!

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐