很多人以为学会计要学数据库,是从"学编程"开始的。恰恰相反——最值钱的不是 SQL 语法,而是底层数据库的那套"表思维"。
关系型数据库的世界观很简单,就一句话:
所有数据,都装在一张张互相有联系的二维表里。
而会计人其实早就懂这套思维了:
- 凭证表 = 凭证号、日期、摘要、借贷方、金额;
- 科目余额表 = 科目编码、期初、借方、贷方、期末;
- 往来明细表 = 客户编码、单据号、发生额、余额。
会计系统本身,就是一个关系型数据库。 你每天在用的 ERP,底层数据库的思维方式,就是下面要讲的这几件事。
一、一张对照表:数据库概念 ↔ 会计 / Excel 场景
先把所有概念一次性映射到你熟悉的世界里:
| 数据库概念 | 人话解释 | Excel 对应 | 会计场景对应 |
|---|---|---|---|
| 表 | 一张二维数据表 | 一个 Sheet | 凭证表、科目余额表、往来明细表 |
| 字段 | 表中的一列 | 一列 | 凭证号、日期、科目、金额 |
| 记录 | 表中的一行 | 一行 | 一笔业务、一张凭证、一个客户 |
| 主键 | 唯一标识一行的字段,不能重复、不能为空 | 没有强制对应(这是 Excel 最大的短板) | 凭证号、客户编码、身份证号 |
| 外键 | 指向另一张表主键的字段,用来连表 | VLOOKUP 的匹配依据 | 凭证表里的"科目编码"指向科目表 |
| 数据类型 | 字段的类型(数字 / 文本 / 日期) | 单元格格式 | 金额是数值、摘要是文本、日期是真日期 |
| 空值 | 这一条记录此字段没填 | 空单元格 | 未回款日期、未开票号 |
| 一对多关系 | 一个 A 对应多个 B | 部门表 vs 员工表 | 一个客户多张订单、一个科目多张凭证 |
| 多对多关系 | 多对多需中间表 | 透视表 | 一张凭证多科目、一个科目多凭证 |
对照完你会发现一个扎心的事实:Excel 里很多"操作习惯"之所以出问题,正是因为 Excel 没有数据库的"主键"“外键"“数据类型"这些强制机制——所以你得自己守规矩。
二、第一模块:关系型数据库的基本概念
这一部分不需要会写代码,但必须建立清晰的心智模型。
1. 二维表结构
- 一行 = 一条完整记录
- 一列 = 一个属性 / 字段
- 一个单元格只放一个值(这是 Excel 里"合并单元格"“一格多值"最该被禁止的根本原因)
2. 主键:表的身份证号
主键 = 唯一标识一条记录的字段,两条规则:不能重复、不能为空。
| 场景 | 主键候选 |
|---|---|
| 凭证表 | 凭证号 |
| 客户表 | 客户编码 |
| 员工表 | 员工工号 |
| 银行流水 | 交易流水号 |
为什么 VLOOKUP 经常对不上? 因为你拿来做匹配依据的字段,本来就不是主键(比如拿客户名称去匹配,但客户名称是可以重复的)。用主键匹配,永远精准;用名称匹配,迟早出事。
3. 外键:表与表之间的桥梁
外键 = 这张表里的一列,指向另一张表的主键。
会计场景最典型的一组关系:
凭证表.科目编码 → 科目余额表.科目编码
凭证表.客户编码 → 客户档案表.客户编码
这就是为什么科目编码比科目名称重要——编码是主键,名称会变、会重复,编码不会。
4. 三种表间关系
- 一对一:一张主表 + 一张扩展表(如员工表 + 员工敏感信息表)
- 一对多:最常见,如客户 → 订单、部门 → 员工
- 多对多:需中间表,如凭证 ↔ 科目(通过"凭证分录表"关联)
判断标准:问自己一句"一个 A 能对应几个 B?“答案自然出来。
三、第二模块:数据类型与字段规范
这是Excel 和数据库最能直接迁移的部分,学完立刻能改进你手上的表。
1. 必须掌握的五种数据类型
| 类型 | 说明 | 会计场景举例 | Excel 对应问题 |
|---|---|---|---|
| 数值 | 可参与计算 | 金额、数量、汇率 | 文本型数字(绿三角)→ SUM 为 0 |
| 文本 | 字符串 | 摘要、名称、备注 | 数字被存成文本 → 无法匹配 |
| 日期 | 真日期类型 | 记账日期、发票日期 | 2024.1.1 不是日期 → 无法按月汇总 |
| 布尔 | 是 / 否 | 是否已开票、是否已审核 | 用”√""ד“已"“未” → 口径混乱 |
| 主键 | 唯一标识 | 凭证号、客户编码 | 凭证号重复 → 账目混乱 |
2. 一条黄金法则
设计字段时先问:这一列,将来要拿来"算"还是"看”? 拿来算的,必须纯数值;拿来看的,才允许有修饰。
例如"金额(万元)“和"金额(元)“要拆成两列,不能在一个格子里写"3.5(万元)”。
3. 一张"会计字段命名规范"清单
- 字段名用完整、统一、无空格的中 / 英文名(如
客户编码、invoice_no) - 同一含义的字段,在所有表里名字必须一样(不要这张表叫"客户名称”,那张表叫"客户简称”)
- 日期统一格式(推荐
YYYY-MM-DD) - 编码统一长度和字符集(如科目编码一律 4 位数字)
四、第三模块:SQL 基础语句——会计人的"五句话”
好消息:SQL 核心语法极小,五句话能覆盖 80% 的日常工作。
而且 SQL 读起来几乎就是结构化英语,和会计的业务语言天然对齐——“筛选这些记录、按这个维度分组、汇总这个指标”。
① SELECT … FROM:取哪张表的哪些列
SELECT 凭证号, 日期, 摘要, 金额
FROM 凭证表;
→ Excel 对应:选中某些列。
② WHERE:按条件筛选
SELECT * FROM 凭证表
WHERE 金额 > 100000
AND 日期 BETWEEN '2024-01-01' AND '2024-12-31'
AND 摘要 LIKE '%差旅%';
→ Excel 对应:筛选 + 高级筛选。LIKE '%差旅%' 等价于 Excel 的"包含’差旅’"。
③ GROUP BY + 聚合函数:分组汇总
SELECT 科目, SUM(金额) AS 借方合计
FROM 凭证表
GROUP BY 科目;
→ Excel 对应:数据透视表。SUM / COUNT / AVG / MAX / MIN 五个聚合函数,必须熟。
④ JOIN:把多张表连起来查
SELECT v.凭证号, k.科目名称, v.金额
FROM 凭证表 v
JOIN 科目表 k ON v.科目编码 = k.科目编码;
→ Excel 对应:VLOOKUP / XLOOKUP。但 JOIN 一次能连多张表、多个字段,比 VLOOKUP 灵活十倍。
JOIN 分四种:
INNER JOIN:只取两边都有的(Excel 的精确匹配)LEFT JOIN:左边全保留,右边没有就空着(对账最常用——找"客户档案里有但本月没发生业务的客户”)
⑤ ORDER BY:排序
SELECT * FROM 凭证表 ORDER BY 金额 DESC;
→ Excel 对应:排序。DESC 降序、ASC 升序。
五、第四模块:用 Excel 反过来理解数据库(也用数据库思维改造 Excel)
这一段是双向翻译——把数据库思维带回 Excel,把 Excel 操作升级为 SQL 思维。
| 你在 Excel 里做的事 | 数据库里的概念 | 升级建议 |
|---|---|---|
| VLOOKUP 匹配 | JOIN / 外键 | 用主键匹配,不要用名称匹配 |
| 数据透视表 | GROUP BY | 拖透视表前先想想:维度是 GROUP BY,值是聚合函数 |
| 筛选 | WHERE | 筛选前确认数据类型统一(否则筛不全) |
| 删除重复项 | 主键约束 | 设主键 = 从源头避免重复,而不是事后删 |
| 合并单元格 | 反数据库行为 | 绝对禁止(数据库根本不允许一格多值) |
| 同一列混格式 | 违反数据类型 | 一列只能有一种类型 |
| 小计混在明细里 | 违反表结构 | 数据库不会把汇总和明细放一起——你也别放 |
| 手工敲"高 / 中 / 低” | 枚举字段 | 用下拉菜单(数据验证),固定取值 |
一表一主题,一列一属性,一行一记录——这就是数据库思维给 Excel 的最大馈赠。
六、第五模块:为什么会计人特别适合学 SQL?
三个理由,一个比一个实在。
① 会计本来就是"结构化思维"的人
科目体系、复式记账、借贷平衡——这套训练早就把你塑造成了天然的"数据结构工程师"。学 SQL,是用新语言说你已经懂的道理。
② 你面对的数据量,早就超出了 Excel 的舒适区
ERP、CRM、银行流水、进销存系统……这些数据真正存放的地方,就是数据库。SQL 是直接和这些系统"对话"的唯一通用语言。
③ SQL 是财务人向"财务 BP / 数据分析 / 智能财务"转型的最低门槛技能
不需要学 Python、不需要学机器学习,先能自己从系统里拉数、对账、做分析,就已经甩开 80% 的同行。
七、学习路径与优先级
| 优先级 | 内容 | 学习投入 | 对应能力 |
|---|---|---|---|
| ⭐⭐⭐⭐⭐ | 表思维(主键、外键、数据类型、表关系) | 半天 | 立刻改进 Excel 建表习惯 |
| ⭐⭐⭐⭐⭐ | 数据类型规范 | 半天 | 立刻改善底表质量 |
| ⭐⭐⭐⭐ | SQL 五句话(SELECT / WHERE / GROUP BY / JOIN / ORDER BY) | 一周 | 能从数据库 / ERP 里自己拉数 |
| ⭐⭐⭐ | 聚合函数(SUM / COUNT / AVG / MAX / MIN) | 2 天 | 自己做分组汇总 |
| ⭐⭐⭐ | LEFT JOIN 与 NULL 处理 | 2 天 | 跨表对账、查缺失数据 |
| ⭐⭐ | 子查询、CTE(WITH 子句) | 一周 | 复杂分析、窗口函数 |
| ⭐ | 索引、事务、ACID | 了解即可 | 知道 DBA 在干什么 |
最划算的路径:先花一天把"表思维"打透 → 再用一周学 SQL 五句话 → 你就能解决日常 80% 的取数、对账、汇总问题。
八、避坑清单:会计人学数据库最常见的 5 个坑
- 想一次学完所有语法 → 先把五句话用到熟练,再谈进阶;
- 忽略数据类型,直接学 JOIN → 类型不对,怎么 JOIN 都是 #N/A;
- 以为要装数据库才能练 → 用 SQLite / W3Schools 在线练习环境,零安装;
- 只会背语法,不看自己业务数据 → 拿你手上的科目余额表、往来明细表练,学得最快;
- 学完 SQL 想彻底抛弃 Excel → 错。SQL 负责"取数和清洗",Excel 负责"分析和展示",两者是搭档不是替代。
九、结语:数据库思维,就是你会计思维的"数字化身"
回到最核心的一句话:
会计的世界观,本来就是数据库的世界观。
科目表 = 字典表 凭证 = 主表 辅助核算 = 外键 借贷平衡 = 完整性约束 期末结转 = 批处理
你不是在学一个新东西,是在把自己已经会的东西,翻译成机器也能懂的语言。
学完这门基础课,你能带走三样东西:
- 一张表,以后建 Excel 底表,按数据库规范建,永不返工;
- 五句话,SELECT、WHERE、GROUP BY、JOIN、ORDER BY,能直接从 ERP / 数据库里自己拉数;
- 一种思维,主键、外键、数据类型、表关系,遇到任何新系统都能快速看懂数据结构。
最后送一句:
Excel 教你做表,SQL 教你取数,数据库思维教你建账。 三样都会,你就是财务部里"最懂数据的那个人"。