第 1 部分
🗄️ 什么是数据库?
理解数据库最简单的方法,就是把它想象成一个 庞大而精密的数字图书馆。如果说一个 Excel 文件就像一张纸,那么数据库就是那个容纳成千上万本“笔记本”、把它们组织好、并让你在瞬间找到信息的结构。
🏛️ 数据库是什么,它有什么用?
定义
数据库是一个 以电子方式存储的、有组织的信息集合。管理这些数据的系统称为 DBMS(数据库管理系统) —— 例如 MySQL、SQL Server 或 Oracle。
5 大主要作用
1
存储海量数据 —— 与在一百万行就开始“卡死”的 Excel 不同,数据库能轻松处理 数十亿行 数据。
2
快速检索 —— 用 SQL 你可以在数百万条记录中找到某个特定值, 只需几毫秒.
3
安全与权限 —— 精确定义谁可以查看、编辑和删除数据。
4
数据完整性 —— 防止重复和矛盾(例如,两个客户拥有相同的 ID 编号)。
5
并发访问 —— 数百名用户同时读写,而不会出现“文件被锁定”的情况。
🏗️ 数据库的层级结构
从最高层到最底层
☁️
服务器 / 实例 —— 运行软件的计算机或云。
🗄️
数据库 —— 主“仓库”。例如:“一个销售系统”。
📁
模式(Schema) —— 仓库内部的逻辑划分(就像超市里的部门:客户、财务……)。
📋
表 —— 实际存储数据的基本单元。
🔍
其他对象 —— 视图(保存的查询)、存储过程(工作流)。
📋 表结构 —— 数据库的核心
说明
表以网格形式构建——但与 Excel 不同,它是 严格的:每一列都有预先定义的角色和数据类型。
| 组成部分 | 描述 | 示例 |
|---|---|---|
| 列 / 字段 | 定义数据类型。每一列都有名称和类型(数字、文本、日期) | 一个“客户名称”或“产品价格”列 |
| 行 / 记录 | 表示一个实体的单个实例。每一行都是一个完整的“对象” | 某个具体客户的所有详细信息 |
| 🔑 主键 | 每一行都必须唯一的列——记录的“身份证” | CustomerID |
| 🔗 外键 | 链接到另一个表中主键的列——在表之间建立关系 | Orders 表中的 CustomerID |
一个直观的示例 —— Products 表
| 🔑 ProductID (PK) | ProductName | 🔗 CategoryID (FK) | ListPrice |
|---|---|---|---|
| 101 | 笔记本电脑 | 1 | 3,500 |
| 102 | 鼠标 | 2 | 150 |
| 103 | 键盘 | 2 | 250 |
关于这个示例:
• 主键:ProductID 确保没有两个产品共用同一个编号
• 外键:CategoryID 链接到 Categories 表——其中类别 1 = “Computers”,2 = “Peripherals”
• 类型:ListPrice 始终是数字,ProductName 始终是文本
• 主键:ProductID 确保没有两个产品共用同一个编号
• 外键:CategoryID 链接到 Categories 表——其中类别 1 = “Computers”,2 = “Peripherals”
• 类型:ListPrice 始终是数字,ProductName 始终是文本
总之: 数据库是你所知道的每一个应用和网站背后的引擎。它把信息存储在相互关联的表中,并让你快速提取复杂的业务洞察。
第 2 部分
🏪 Northwind 数据库结构
Northwind 是一个经典的数据库,模拟一家 贸易公司。它包含 8 张相互关联的核心表。这是我们整个课程都会使用的数据库。
🗂️ Northwind 的 8 张表
📊 表结构 —— Northwind
🏢 Customers
🔑 CustomerID
CompanyName
ContactTitle
Address
City
Region
PostalCode
📦 Orders
🔑 OrderID
🔗 CustomerID
🔗 EmployeeID
OrderDate
RequiredDate
ShippedDate
🔗 ShipVia
Freight
ShipCity
ShipCountry
📋 Order Details
🔑 OrderID
🔗 ProductID
UnitPrice
Quantity
Discount
🛒 Products
🔑 ProductID
ProductName
🔗 SupplierID
🔗 CategoryID
UnitPrice
UnitsInStock
Discontinued
👤 Employees
🔑 EmployeeID
LastName
FirstName
Title
BirthDate
Address
City
🏭 Suppliers
🔑 SupplierID
CompanyName
ContactTitle
Address
City
PostalCode
🏷️ Categories
🔑 CategoryID
CategoryName
描述
Picture
🚚 Shippers
🔑 ShipperID
🔗 CompanyName
Phone
🔗 表之间的关系
| 源表 | 通过…链接 | 目标表 | 含义 |
|---|---|---|---|
| Orders | CustomerID | Customers | 每个订单都属于一位客户 |
| Orders | EmployeeID | Employees | 每个订单都由一名员工处理 |
| Orders | ShipVia | Shippers | 每个订单都由一家物流公司发货 |
| Order Details | OrderID | Orders | 每个订单的行项目 |
| Order Details | ProductID | Products | 订购了哪个产品 |
| Products | SupplierID | Suppliers | 谁供应该产品 |
| Products | CategoryID | Categories | 该产品属于哪个类别 |
提示: the Orders 表是 Northwind 的核心——它链接到其他 4 张表。我们编写的大多数 JOIN 查询都会经过它。
🎯 你在 Northwind 上的第一个查询
基本 SELECT
连接到 Northwind 后,你就可以检索数据:
如果你看到 5 行客户数据——说明数据库运行得很完美!🎉
USE Northwind;SELECT * FROM customers LIMIT 5;如果你看到 5 行客户数据——说明数据库运行得很完美!🎉
第 3 部分
🔑 键与关系
键是表之间关系的基础——正是它们把一堆孤立的表变成一个真正的数据库。
🔑 主键
定义与规则
标识每一行的列(或多列的组合) 完全唯一地.
3 条规则:
1. 任何两个值都不能相同
2. 它不能为 NULL
3. 它不随时间改变
示例:
3 条规则:
1. 任何两个值都不能相同
2. 它不能为 NULL
3. 它不随时间改变
示例:
CustomerID (在 customers 表中)—— 每个客户都有自己唯一的编号。
主键是表中每一行的 “身份证” —— 就像没有两张身份证能共用同一个号码一样。
🔗 外键
定义
一个表中指向主键的列 (在另一个表中)。它在表之间建立关系。
示例:
含义:“每个订单都有一个明确的客户,可以在 customers 表中找到。”
示例:
CustomerID (在 orders 表中)指向 CustomerID (在 customers 表中)。含义:“每个订单都有一个明确的客户,可以在 customers 表中找到。”
引用完整性: 你不能创建一个 CustomerID 在 customers 表中不存在的订单。数据库会保持关系有效。
📊 关系的类型
| 关系类型 | 说明 | Northwind 中的示例 |
|---|---|---|
| 1:N(一对多) | 表 A 中的一行链接到表 B 中的多行 | 一位客户 → 多个订单 |
| N:N(多对多) | 需要一张连接表——多对多 | Orders ↔ Products(通过 Order Details) |
| 1:1(一对一) | 表 A 中的一行 = 表 B 中的一行 | 较少见——例如,单独的联系方式 |
🔄 这与 JOIN 有什么关系?
直接的联系
JOIN 命令正是利用这些主键/外键关系来合并表:
我们编写的每一个 JOIN 都通过定义表间关系的列来合并表。
JOIN orders ON customers.CustomerID = orders.CustomerID我们编写的每一个 JOIN 都通过定义表间关系的列来合并表。
规则: 在每个 JOIN 之前,问自己—— 这些表是通过哪一列链接的? 答案通常是主键/外键。
第 4 部分
📊 SQL 与 Excel
两个都是出色的工具——但用途不同。理解它们的区别有助于你知道何时使用哪一个。
⚡ 完整对比
| 对比项 | Excel | SQL |
|---|---|---|
| 数据量 | 最多约 100 万行 | 数十亿行 |
| 速度 | 处理大文件时慢 | 任何规模都非常快 |
| 共享与可访问性 | 文件到处传递,版本冲突 | 一个供所有人使用的中央数据库 |
| 数据安全 | 任何人都能编辑 | 为每个用户设置精确权限 |
| 人为错误 | 容易输入错误的值 | 严格的结构防止错误 |
| 并发工作 | 文件被锁定——一次只能一个人 | 数百名用户同时使用 |
| 可视化灵活性 | 轻松制作图表和配色 | 需要单独的 BI 工具 |
| 对普通用户的易用性 | 直观的图形界面 | 需要学习一门语言 |
| 精准检索 | 把整个文件加载到内存 | 只检索所需的内容 |
🎯 何时使用哪一个?
在以下情况使用 Excel
✅ 对小文件的一次性分析(最多几十万行)
✅ 快速可视化——图表、数据透视表
✅ 处理已从数据库导出的数据
✅ 方便与不懂 SQL 的管理者共享
✅ 快速可视化——图表、数据透视表
✅ 处理已从数据库导出的数据
✅ 方便与不懂 SQL 的管理者共享
在以下情况使用 SQL
✅ 处理数百万行及以上的数据
✅ 连接多张表的复杂查询
✅ 自动刷新的报表
✅ 维护“单一可信数据源”——正确、集中的数据
✅ 自动化并运行重复的流程
✅ 连接多张表的复杂查询
✅ 自动刷新的报表
✅ 维护“单一可信数据源”——正确、集中的数据
✅ 自动化并运行重复的流程
实际上: 分析师用 SQL 从数据库中提取数据——然后把它导入 Excel、Power BI 或 Python 进行分析和可视化。 两者相辅相成!
📈 结论 —— 为什么要学 SQL?
3 个关键原因
1
一门通用的语言 —— SQL 适用于 MySQL、SQL Server、Oracle、PostgreSQL 等等。学一次——到处都能用。
2
市场需求 —— SQL 是任何 Data、BI、Analytics 或 Product 岗位中最抢手的技能之一。
3
分析的独立性 —— 不必等 IT 准备报表,你可以在需要的时候精确地提取所需的数据。